 **************************************************************************
;
; Filename : MEMORY.D
; -------------------
;
; (c) 1990 by Thomas Lehmann
;
;
; Jackophone V5.00
;
;
;  Definitionen der Memorybereiche
;
;
;**************************************************************************

INPUT_SIZE	equ	$08	; Größe des Input-Buffers




STK_INIT	equ	$ff-SIZE_TASK_S	; SP bei Reset
STK_SIZE	equ	SIZE_TASK_S+12	; Stackgröße für Init und IRQ
STK_END	equ	$01ff-STK_SIZE	; Stackbereich $1ff-1xx


	; ==============
	; Eprom Adressen
	; ==============
EPR1_PAGE1	equ	$7000	; Eprom1, Page1
END_EPR1_P1	equ	$8000	; Ende Eprom1, Page1
EPR1_PAGE2	equ	$f000	; Eprom1, Page2
INIT_VEKT	equ	$fffa	; Reset Vektoren

EPR2_PAGE1	equ	$6000	; Eprom2, Page1
END_EPR2_P1	equ	$7000	; Ende Eprom2, Page1
EPR2_PAGE2	equ	$e000	; Eprom2, Page2
END_EPR2_P2	equ	$f000	; Ende Eprom2, Page1



	; ============
	; RAM Adressen
	; ============
ZP	set	$0000	; Startadr. der Zeropage
BU	set	$0100	; Bereich für Buffer außerhalb der Zeropage
RAM1	set	$0200	; RAM-Bank 1
RAM1_END	equ	$07ff	; Ende RAM-Bank 1
RAM2	set	$3000	; RAM-Bank 2, nur mit Zusatz-RAM
RAM2_END	equ	$37fe	; Ende RAM-Bank 2, letzes Byte für RAM-Test
ZRAM_TST	equ	RAM2_END+1	; Adr. für Test auf vorhandenes Zusatz-RAM




	; --------------------------------------------------
	; Zeropage Adressen, keine Initialisierung bei Reset
	; --------------------------------------------------

	org	ZP
uhr_buff	edo	UHR_BULA	; Buffer für die Uhr
geb_fakt	edo	1	; Preis je Gebühreneinheit
ind_adr	edo	2	; 2Byte Zeropageadr. für indirekte Adressierung
ht_port	edo	1	; Port für Hörtonauswertung
no_ini_flag	edo	1	; Flags die nicht initialisiert werden dürfen
term_zykl	edo	1	; Termin Zyklus



	; ------------------------------------
	; ab hier wird bei Reset initialisiert
	; ------------------------------------

INIT_START	edo	0	; Startadr. des initialisierten RAM`s



	; Struktur für Taskwechsler
	; -------------------------
task_nr	edo	1	; aktuelle Task
task_sl_cnt	edo	ANZ_TASK	; Anzahl wie oft Task aussetzt
task_reg_a	edo	ANZ_TASK	; Accu retten
task_reg_x	edo	ANZ_TASK	; X-Reg. retten
task_reg_y	edo	ANZ_TASK	; X-Reg. retten
task_sp	edo	ANZ_TASK	; Stackpointer retten
task_ev_adr	edo	ANZ_TASK*2	; Ereignisadresse
task_event	edo	ANZ_TASK	; Ereignis für wartende Task





	; ===================
	; allgemeine Register
	; ===================

hlp_reg	edo	2	Hilfsregister, nur temporär zu verwenden
calc_reg	edo	6	Hilfsregister für Rechenaufgaben
stk_merk	edo	1	Stackptr. der vom IRQ unterbr. Routine
interrupt	edo	1	IRQ ist gerade aktiv
irq_watch	edo	1	IRQ läuft, wird vom IRQ nachgetriggert
main_watch	edo	1	Main Prg. läuft
irq_wait	edo	1	warten bis RESET (IRQ)
main_wait	edo	1	warten bis RESET (Main Prg)
struct_tim	edo	ANZ_TIM	10mS Timer Struktur
tim_100ms_t	edo	1	Anzahl der 10mS IRQ`s bis 100mS erreicht
struct_tim100 edo	ANZ_TIM100	100mS Timer Struktur
uhr_tim	edo	1	Uhr Timer, abgelaufen wenn Sekunde erreicht
sekunde	edo	1	Sekunde ist erreicht
uhr_timdat	edo	1	Offset auf Uhrbuffer bei Uhr stellen
dp_bu_po	edo	1	Pointer auf Char im Displaybuffer
blink_bit	edo	1	Blink BIT für LED`s
led_po	edo	2	2 Byte Pointer, zeigt auf LED-RAM
led_yl	edo	1	aktuelle YL Achse
led_xl	edo	1	Byte fuer XL-Achsen
akt_mb	edo	1	aktuelle MB-Achse
wta_merk	edo	1	Zustand der Wähltastatur vor Entprell. merken
wtast	edo	1	Tastenwert einer Wähltaste
wta_prg	edo	1	Prg. welches bei Wähltaste ausgeführt wird
wta_fkt	edo	2	Funktion für Wähltaste über Tabelle
wta_tab_len	edo	1	Speicher für die Tabellenlänge
passw_offs	edo	1	BTA-Modus wurde eingeleitet, Offs. auf Passw.
last_nt	edo	1	letzte NT Nr.
akt_x	edo	1	aktuelle X-Achse bei Tastaturabfrage
x2_9_merk	edo	1	zustand X2-X9 retten, Display RS-Flag
x_achse	edo	1	Port X-Achse bei Tastaturabfrage
tast_merk	edo	1	Zustand der Y-Achse vor Entprell. merken
taste	edo	1	Offset auf Tasten-Matrix, Tastenstatus
tw	edo	1	Tastenwert
taster_tw	edo	1	Tastenwert bei gedrückter Ertaste oder Taster
taster_ind	edo	1	Tastennr. bei gedrückter Ertaste oder Taster
prg_port	edo	1	Status der programmierbaren Ports
vers_stat	edo	1	Status Byte für Version-Anzeige
dip_stat	edo	1	Zustand des DIP-Switch
feap_stat	edo	1	Zustand des Telefons
allg_stat	edo	1	allgemeine Status-Infos
hgeb_stat	edo	1	Status von Hörton und Gebührenausgabe
ltg_stat	edo	1	Zustand der Leitung
su_stat	edo	1	Zustand der Summers
fs_stat	edo	1	FS Status, durch GU, LH, FS
tty_sts	edo	1	Status der seriellen Schnittstelle
txen_rl23	edo	1	Zustand TX-Enable und RL2/RL3 merken
input_po	edo	1	Pointer auf Input-Buffer
anz_input	edo	1	Anzahl der Eingaben
displ_prg	edo	1	Prg. welches bei Displayanz. ausgeführt wird
modus	edo	1	Status Byte für akt. Modus, (Sp. Kontr, ...)
menu	edo	1	Prg. bei Sp/Ko Taste, Untermenu
anz_txt	edo	1	Anz. der versch. Texte bei Merfachausgabe
akt_txt	edo	1	aktueller Text bei Merfachausgabe
dsp_txt	edo	2	Adr. des 1.Textes, für merfache Textausgabe
key_val	edo	2	Tastenwert und Nr. bei auto Berechtigung
nam_sp	edo	2	akt. Speicheradr. für Namentasten
ziff_offs	edo	1	akt. Ziffer bei Rufnr. speichern
whl_zcnt	edo	1	Anzahl der Ziffern im Wahl-Buffer
wahl_po	edo	1	Pointer auf aktuelle Wahlziffer
whl_cu_po	edo	1	Wahlablauf Cursorposition
ziffer	edo	1	Anzahl der Impulse für Wahlziffer
vorwahl_tim	edo	1	Vorwahlzeit mit und ohne Hörtonauswertung
gesprd	edo	2	Gesprächsdauer
gesprd_sek	edo	1	aktuelle Sekunde für Zeitermittlung
akt_txtchar	edo	1	aktuelles Textzeichen bei BTA-Textber.
term_dat	edo	1	akt. Termindaten für Ausgabe
term_nr	edo	1	akt. Terminnr. bei Speichern/Kontrolle
err_term	edo	1	BIT-Nr. für erreichte Termine
term_su	edo	1	Anz. der Termin-Summer-Töne
akt_stat	edo	1	akt. Prg. Nr. für Statistikausgabe
hton_tim	edo	1	Timer für Hörtonauswertung
dez_low	edo	1	low Wert der 16 BIT Zahl für Ausgabe
dez_high	edo	1	high Wert der 16 BIT Zahl für Ausgabe
offs_relber	edo	1	Offset auf Relaisber. bei Sp./Ko. Relais
erd_rel	edo	1	Relais bei Wahl der Erdtaste
geb_cnt	edo	2	Anzahl Gebührenimpulse für ein Gespräch
nxt_tzykl	edo	2	nächster Zyklus eines aktiven Termins
keytxt_prg	edo	1	Prg. Nr. für Tasten mit Text Funktion
ntspec_nr	edo	1	akt. Nummer für NT Sonder Eingaben
namsp_fkt	edo	1	Funktion für NT speichern/kontrollieren
telb_free	edo	1	letzter freier Eintrag für TeleBuch
wta_repeat	edo	2	Wähltasten Repeat Counter
key_repeat	edo	2	Tasten Repeat Counter
jmp_adr	edo	2	Adr. für Sprungziel ins andere Eprom
txd_cnt	edo	1	Anzahl Zeichen im TX Buffer
txd_offs	edo	1	Offset auf akt. Zeichen im Transmit Buffer
txd_i_offs	edo	1	Offset auf akt. Zeichen (IRQ)
rxd_cnt	edo	1	Anzahl Zeichen im RX Buffer
rxd_offs	edo	1	Offset auf akt. Zeichen im Receive Buffer
rxd_i_offs	edo	1	Offset auf akt Zeichen (IRQ)
cmd_cnt	edo	1	Anzahl Zeichen im Cmd. Buffer
cmd_cntwait	edo	1	Anz. Eingaben bis Auswertung gestartet wird
xon_xoff	edo	1	Wert für Senden von XON/XOFF
puts_adr	edo	2	Adr. des akt. auf ACIA auszugebenen Strings
dump_adr	edo	2	Adr. für Speicher Dump


INIT_END	edo	0	Ende des initialisierten RAM`s





	; freier Bereich unterhalb der Termin Variablen
	; ---------------------------------------------
FREE_ZP	edo	$100-INIT_END-4-48-12	; freier Bereich in Zeropage
			



term_iadr	edo	2		; temporäre Adr. der Terminstruktur
ttxt_count	edo	2		; Anzahl der eingegeben Textzeichen

HLP	set	MAX_TERM+4		; Anrufbeantworter und Post Termin
HLP	set	HLP*4		; Stunde, Minute, Tag, Monat
term_time	edo	HLP		; Terminspeicher für Zeit

term_days	edo	MAX_TERM+4		; Speicher für Termintage



ZP	sdo	0		; letztes Byte
	ifmi	$100-ZP		; Zeropage überschritten ?
	conprt	"!!!!  ZEROPAGE  !!!!"
	endif



	; ---------------------------------------------------
	; Buffer ausserhalb der Zeropage, unterhalb des Stack
	; wird nicht initialisiert
	; ---------------------------------------------------

	org	BU
dp_buff	edo	DP_BU_LA		; Display-Buffer
input_buff	edo	INPUT_SIZE		; Eingabebuffer für verschiedene Anwendungen
struct_stat	edo	STRUCT_STAT		; Buffer für Statistik
rel_tab	edo	ANZ_RELTXT		; Berechtigung für Relais

SIZE_CMD_BU	equ	10
cmd_buff	edo	SIZE_CMD_BU		; Buffer zur Auswertung externer Cmd`s



BU	sdo	0
FREE_STK	equ	STK_END-BU		; freier Bereich für Stack

	ifmi	STK_END-BU		; Stack errreicht ?
	conprt	"!!!!  STACK  !!!!"
	endif



	; --------------------------------------------------
	; Buffer ausserhalb der Zeropage, oberhalb des Stack
	; wird nicht initialisiert
	; --------------------------------------------------

	org	RAM1
tast_tab	edo	TAST_BER		; Tastenberrechtigung
tast_txt	edo	TAST_MATRIX		; Tastenber. für ASCII-Zeichen
KEYBER_INIT	edo	0		; Ende für löschen Tastenber.

term_text	edo	MAX_TERM*TTXT_LEN	; Terminspeicher für Texte

led_ram	edo	LED_MATRIX		; RAM für LED-Matrix
LED_RAM_END	edo	0		; LED-RAM Ende

wahl_buff	edo	MAX_WHL_ZIFF+1	; Wahl-Buffer für gewählte Ziffern
merk_buff	edo	MAX_WHL_ZIFF+1	; Merker-Buffer




	; der Speicher für Rufnr. ist folgendermaßen aufgeteilt:
	; ------------------------------------------------------
	; NT 0 	   : Babyphone Rufnr. !! muß vor Notruf stehen !!
	; NT 1-4   : Notruf Nummern
	; NT 5-?   : NT Rufnr. im 1. RAM
	; NT ?-100 : NT Rufnr. im 2. RAM
	; NT 101-? : Rufnr. für Telefonbuch

	; restlicher Bereich im RAM1 für Babyphone Rufnr. und Namentasten
	; ===============================================================
RAM1	sdo	0
HLP	set	RAM1_END-RAM1			; freier Bereich im RAM 1
MAX_RUF	equ	HLP/MAX_NAM_ZIFF		; Anzahl Rufnr. Speicher im 1. RAM
nam_buff1	edo	MAX_NAM_ZIFF*MAX_RUF	; Speichergröße für Namtast im 1.RAM
MAX_NAM1	equ	MAX_RUF-NT_NAMTAST		; Anzahl Namentasten im 1. RAM
                                          ; max. Anz. - 1. wirkliche NT


RAM1	sdo	0
FREE_RAM1	equ	RAM1_END-RAM1			; freier Bereich im RAM 1

	ifmi	RAM1_END-RAM1			; RAM-Ende erreicht
	conprt	"!!!!  RAM1  !!!!"
	endif


	; ----------------------------------------------------
	; Definitionen im Zusatz-RAM, wird nicht initialisiert
	; ----------------------------------------------------

	org	RAM2
	; restliche Namentasten im 2. RAM
	; -------------------------------
MAX_NAM2	equ	MAX_NAM_TAST-MAX_NAM1	; Anzahl Namentasten im 2.RAM
nam_buff2	edo	MAX_NAM_ZIFF*MAX_NAM2	; Speichergröße für Namtast im 2.RAM


	; Anzahl der Einträge für Telefonbuch berechnen
	; die Rufnummern werden im Anschluß der NT gespeichert
	; die erste Rufnummer erhält den Offset der letzten NT
	; ----------------------------------------------------
SIZE_TXD	equ	50	Anzahl Zeichen in TX Buffer
SIZE_RXD	equ	60	dito RX Buffer


HLP	sdo	0				; akt. RAM Adr.
FREE	set	RAM2_END-HLP-SIZE_RXD-SIZE_TXD	; freier Bereich im RAM 2

TEL_NAM	set	MAX_NAM_ZIFF/2
HLP	set	TEL_NAM+MAX_TEL_CHAR	; Größe je Eintrag, NT + TXT
MAX_TEL	equ	FREE/HLP				; Anzahl der Tel Einträge

telnt_buff	edo	MAX_TEL*TEL_NAM			; Speicherbereich für Telbuch Rufnr.
teltxt_buff	edo	MAX_TEL*MAX_TEL_CHAR	; Speicher für Telefonbuch Texte


	; RX und TX Buffer
	; ================
txd_buff	edo	SIZE_TXD
rxd_buff	edo	SIZE_RXD



RAM2	sdo	0
FREE_RAM2	equ	RAM2_END-RAM2	; freier Bereich im RAM 2

	ifmi	RAM2_END-RAM2	; RAM-Ende erreicht
	conprt	"!!!!  RAM2  !!!!"
	endif


