1638 lines
29 KiB
ArmAsm
1638 lines
29 KiB
ArmAsm
*H P8000 U880-FIRMWARE 3.0
|
|
*P 84
|
|
;******************************************************************************
|
|
;* *
|
|
;* *
|
|
;* P8000 - SOFTWARE *
|
|
;* *
|
|
;* Entwicklerdokumentation *
|
|
;* *
|
|
;* Betriebssystem UDOS *
|
|
;* *
|
|
;* Programm: U880SM *
|
|
;* *
|
|
;* Version: 3.1 *
|
|
;* *
|
|
;* Bearbeiter: M. Weber *
|
|
;* *
|
|
;* Datum: 05.07.1989 *
|
|
;* *
|
|
;* *
|
|
;******************************************************************************
|
|
;
|
|
;
|
|
;********************************************************
|
|
;* *
|
|
;* P8000 U880-SOFTWAREMONITOR *
|
|
;* *
|
|
;********************************************************
|
|
;
|
|
;
|
|
;
|
|
ENTRY
|
|
;
|
|
JR INIGO0
|
|
DEFM '(C)EAW'
|
|
;
|
|
RST1 DEFS 3
|
|
;
|
|
DEFM '8801 '
|
|
;
|
|
RST2 DEFS 3
|
|
INIGO0
|
|
LD A,NRET
|
|
JR GO01
|
|
DEFS 1
|
|
;
|
|
;
|
|
RST3 DEFS 3
|
|
GO01
|
|
LD (DSEL),A
|
|
JR GO02
|
|
;
|
|
;
|
|
RST4 DEFS 3
|
|
GO02
|
|
LD HL,DPAVEC
|
|
JR GO03
|
|
;
|
|
;
|
|
RST5 DEFS 3
|
|
GO03
|
|
LD B,FDCONF-DPAVEC
|
|
JP GO04
|
|
;
|
|
;
|
|
RST6 DEFS 8
|
|
;
|
|
;
|
|
;EINTRITTSPUNKT FUER TESTROUTINEN
|
|
BRKENTRY:
|
|
;
|
|
LD (HL_),HL
|
|
EX (SP),HL ;HL:=PC+1
|
|
DEC HL ;HL:=PC
|
|
INC SP ;RST AUSGLEICHEN
|
|
INC SP
|
|
NMIBRK
|
|
LD (SP_),SP
|
|
LD SP,SP_
|
|
PUSH HL
|
|
PUSH IY
|
|
PUSH IX
|
|
EXX
|
|
EX AF,AF'
|
|
PUSH HL
|
|
PUSH DE
|
|
PUSH BC
|
|
PUSH AF
|
|
EXX
|
|
EX AF,AF'
|
|
PUSH DE
|
|
PUSH BC
|
|
PUSH AF
|
|
;
|
|
LD A,I
|
|
PUSH AF ;INT.-VEKTOR + INT.ENABLE FLIP-FLOP
|
|
;
|
|
XOR A ;ZERO --> 1
|
|
LD SP,STACK
|
|
CALL BREAK ;BREAKPOINT LOESCHEN
|
|
LD HL,BRKLOP
|
|
PUSH HL
|
|
RETI
|
|
;
|
|
;EINTRITTSPUNKT FUER NMI
|
|
NMIENTRY
|
|
LD (HL_),HL
|
|
LD HL,NMIBRK
|
|
EX (SP),HL
|
|
RETN
|
|
;
|
|
GO04
|
|
;
|
|
LOP01: LD (HL),0 ;RAM LOESCHEN DPAVEK - INVEK
|
|
INC HL
|
|
DJNZ LOP01
|
|
;
|
|
;
|
|
;
|
|
; Initialisierung von Zellen fuer die Terminalarbeit
|
|
;
|
|
LD A,10H
|
|
LD (MCSQ),A
|
|
LD A,0E0H
|
|
LD (APEIN),A
|
|
LD (APAUS),A
|
|
;
|
|
; INITIALISIERUNG DER ISR-TABELLE FUER DEN SIO
|
|
;
|
|
LD HL,SIOTAB
|
|
LD DE,ITABS0+2
|
|
LD BC,6
|
|
LDIR
|
|
|
|
|
|
;INITIALISIERUNG DER KOPPELSCHNITTSTELLE
|
|
|
|
|
|
LD HL,KBC0 ;PORT B: BIT-MODE
|
|
LD C,P0BC
|
|
LD B,3
|
|
OTIR
|
|
|
|
LD A,80H
|
|
OUT (P0BD),A ;RESET U8000 HIGH
|
|
|
|
|
|
|
|
;VARIABLEN BLOCKTRANSFER
|
|
|
|
LD HL,BASVAR
|
|
LD DE,NULLCT
|
|
LD BC,CURT0-NULLCT
|
|
LDIR
|
|
|
|
BRKLOP:
|
|
LD SP,STACK
|
|
LD A,ITABC0.SHR.8 ;A:= HIGH ADRESSE DES INT. VEKTORS
|
|
;
|
|
ENTRY1
|
|
LD I,A
|
|
IM 2
|
|
EI
|
|
;
|
|
JP PE,SYSST
|
|
;
|
|
;RESTLICHES VARIABLENFELD INITIALISIEREN
|
|
;HL ZEIGT BEI NEUSTART AUF CURT0
|
|
EX DE,HL
|
|
LD B,10 ;FLOPPY-LISTE UND MZNEXT
|
|
ILOOP1 LD (HL),-1
|
|
INC HL
|
|
DJNZ ILOOP1
|
|
;
|
|
LD B,4 ;ADRFLG UND TASTATURMERKZELLEN
|
|
ILOOP2 LD (HL),0
|
|
INC HL
|
|
DJNZ ILOOP2
|
|
LD (HL),0FBH ;ENABLE INT
|
|
INC HL
|
|
LD (HL),0C3H ;JUMP EINTRAGEN
|
|
;STACKPOINTER FUER DEBUG INITIALISIEREN
|
|
LD HL,STACK
|
|
LD (SP_),HL
|
|
;
|
|
*I FDINIT.S
|
|
;
|
|
RASC LD HL,CONOBF ;OUTPTR INITIALISIEREN
|
|
LD (OUTPTR),HL
|
|
CALL INASC
|
|
CP CR
|
|
JP NZ,BDEC0
|
|
;
|
|
LD A,(FDCONF)
|
|
LD (MFDC),A
|
|
|
|
;BOOT EINLESEN
|
|
BOOT: LD IY,DPAVEC ;STANDARD PARAMETERVEKTOR AUFBAUEN
|
|
LD HL,KOMINT ;DATA TRANSFER ADRESS
|
|
LD (DPAVEC+2),HL
|
|
LD HL,138 ;DATA LENGTH LADEN
|
|
LD (DPAVEC+4),HL
|
|
;
|
|
LD A,80H
|
|
LD (DSEL),A
|
|
LD HL,0000
|
|
LD (CRCERR),HL
|
|
LD (TRKERR),HL
|
|
LD (SECERR),HL
|
|
LD (DPAVEC+11),HL
|
|
LD (IY+1),RDBIN ;REQUEST CODE LADEN
|
|
CALL DISK ;DISKETTENZUGRIFF
|
|
LD A,(IY+10)
|
|
CP NRET ;NORMAL RETURN ?
|
|
JP Z,TESTSD ;TESTEN SYSTEMDISKETTE
|
|
;
|
|
CP 0C2H
|
|
JR Z,BOOTER ;DRIVE NOT READY
|
|
;
|
|
LD HL,FDCONF
|
|
INC (HL)
|
|
LD A,(HL)
|
|
CP 8
|
|
JR C,BOOT
|
|
;
|
|
;
|
|
BOOTER
|
|
LD A,(MFDC)
|
|
LD (FDCONF),A ;ALTEN WERT ZURUECKHOLEN
|
|
LD SP,STACK
|
|
LD A,'>'
|
|
LD (PROMPT),A
|
|
LD HL,TDERR ;TEXT "DISK ERROR"
|
|
CALL OUTAS ;AUSGABE ASC-ZEICHEN UEBER PCON
|
|
JP RASC
|
|
;
|
|
; Test, ob wirklich eine Systemdiskette im Laufwerk 0 ist
|
|
; Pruefen der Kennzeichnung 'P8000SYS'
|
|
;
|
|
TESTSD
|
|
LD HL,KENNSD
|
|
LD DE,0C80H
|
|
LD BC,8
|
|
NWSYS LD A,(DE)
|
|
CPI
|
|
JR NZ,AUSISD
|
|
INC DE
|
|
JP PE,NWSYS
|
|
|
|
LD HL,(0C7EH) ;FDCONF von Diskette holen
|
|
LD (FDCONF),HL
|
|
JP KOMINT
|
|
|
|
AUSISD LD SP,STACK
|
|
LD HL,SDERR
|
|
CALL OUTAS
|
|
JP RASC
|
|
|
|
;
|
|
;
|
|
SYSST
|
|
LD A,0FBH ;EI ZURUECKSSCHREIBEN
|
|
LD (GOJMP),A
|
|
LD A,(INT) ;INT.ENABLE FLIP-FLOP RETTEN
|
|
AND 4
|
|
CALL INSTA2
|
|
LD A,(BRKFLG)
|
|
BIT 7,A
|
|
JR Z,SYSST1
|
|
LD HL,(BRKRET)
|
|
JP (HL)
|
|
;
|
|
SYSST1:
|
|
LD A,(MZNEXT)
|
|
AND A
|
|
JR NZ,TBAUS
|
|
CALL OUTRW
|
|
LD A,(EIINS)
|
|
LD HL,(EIADR)
|
|
LD (HL),A
|
|
NEXTE: LD HL,N_
|
|
DEC (HL)
|
|
JP NZ,NEXLOP
|
|
JP DEBUG
|
|
TBAUS:
|
|
LD HL,TBREA
|
|
CALL OUTAS
|
|
LD HL,(PC_)
|
|
CALL BTOHA
|
|
CALL OUTZL ;AUSG: 'BREAK XXXX'
|
|
;
|
|
;BEFEHLSDECODIERUNG EINGABEKOMMANDOS
|
|
BDEC: CALL INASC ;EINGABE ASC- ZEICHEN UEBER PCON
|
|
BDEC0: LD HL,DEBUG
|
|
PUSH HL
|
|
CP CR ;CARRIAGE RETURN
|
|
LD HL,MZNEXT
|
|
JR NZ,BDEC1
|
|
AND (HL)
|
|
JR NZ,ERROR
|
|
JP NEXNL
|
|
;
|
|
BDEC1
|
|
LD (HL),-1 ;RESET MZNEXT
|
|
LD HL,(INPTR)
|
|
RES 5,A
|
|
CP 'F' ;FILL ?
|
|
JP Z,FILL
|
|
CP 'G' ;GO ODER GET ?
|
|
JP Z,GOGET
|
|
CP 'M' ;MOVE ?
|
|
JP Z,MOVE
|
|
;CP 'I'
|
|
;JP Z,INSTAT ;INT-STATUS
|
|
CP 'D' ;DISPLAY ?
|
|
JP Z,DISPL
|
|
CP 'P' ;I/O-PORT
|
|
JP Z,IOPORT
|
|
CP 'O' ;OPERATING SYSTEM ?
|
|
JR NZ,BDEC2
|
|
POP HL ;SP ZURUECKSTELLEN
|
|
JP BOOT
|
|
BDEC2: CP 'R' ;REGISTER ?
|
|
JP Z,REGIST
|
|
CP 'Q' ;QUIT ?
|
|
JR NZ,BDEC3
|
|
CALL NSIGN
|
|
LD HL,BRKFLG
|
|
BIT 5,(HL)
|
|
JR Z,ERROR
|
|
LD HL,(EXTRET)
|
|
JP (HL)
|
|
;
|
|
BDEC3: CP 'S' ;SAVE ?
|
|
JP Z,BOOT
|
|
CP 'B' ;BREAK ?
|
|
JP Z,BREAK
|
|
CP 'N' ;NEXT
|
|
JR Z,NEXT
|
|
CP 'X'
|
|
JR Z,U8000SM
|
|
CP 'T'
|
|
JR Z,EIGT
|
|
ERROR: LD SP,STACK
|
|
LD HL,FRAGZ ;FRAGEZEICHEN AUSGEBEN
|
|
CALL OUTAS ;AUSGABE ASC-ZEICHEN UEBER PCON
|
|
;********************************************************
|
|
;* *
|
|
;* DEBUG-EINTRITTSPUNKT *
|
|
;* *
|
|
;********************************************************
|
|
DEBUG: LD A,'>' ;PROMPT MIT '>' LADEN
|
|
LD (PROMPT),A
|
|
LD HL,BRKFLG
|
|
BIT 6,(HL)
|
|
RES 6,(HL)
|
|
JP Z,BDEC
|
|
LD HL,(EXTRET)
|
|
JP (HL)
|
|
;
|
|
;
|
|
U8000SM
|
|
CALL NSIGN
|
|
RES 5,A
|
|
CP 'R'
|
|
PUSH AF
|
|
LD A,1
|
|
LD C,0
|
|
LD B,0D0H
|
|
OUT (C),A
|
|
JP 0DB00H
|
|
|
|
EIGT
|
|
LD A,20H
|
|
CALL PUTA
|
|
CALL PUTA
|
|
EIGT1 IN A,(S0BC)
|
|
BIT 2,A
|
|
JR Z,EIGT1
|
|
LD A,1
|
|
LD C,0
|
|
LD B,0C0H
|
|
OUT (C),A
|
|
JP 0CEF0H
|
|
|
|
|
|
;********************************************************
|
|
;* *
|
|
;* NEXT *
|
|
;* *
|
|
;********************************************************
|
|
;
|
|
NEXT:
|
|
CALL OUTRB
|
|
CALL INHZ
|
|
JR NZ,NEXT1
|
|
NEXNL: LD A,1 ;KEINE ZAEHLEREINGABE
|
|
NEXT1:
|
|
LD (N_),A ;DURCHLAUFZAEHLER
|
|
NEXLOP
|
|
DI
|
|
SUB A
|
|
LD (MZNEXT),A
|
|
LD (GOJMP),A ;EI VOR "GO" ABSPRUNG LOESCHEN
|
|
LD DE,(PC_)
|
|
DEC DE ;PC:=N-1 WEGEN EI EINTRAG
|
|
LD HL,TRCINT
|
|
LD (ITABC0+4),HL ;STARTADRESSE IN DIE ISR TABELLE LADEN
|
|
LD A,ITABC0.SHR.8 ;A:= HIGH ADRESSE DES INT. VEKTORS
|
|
LD (I_),A
|
|
LD A,87H ;CTC ALS TIMER PROGRAMMIEREN
|
|
OUT (CTC0+2),A
|
|
LD A,1 ;ZEITKONSTANTE
|
|
OUT (CTC0+2),A
|
|
EX DE,HL
|
|
LD (EIADR),HL
|
|
LD A,(HL)
|
|
LD (EIINS),A
|
|
LD (HL),0FBH ;EI LADEN
|
|
LD (PC_),HL
|
|
JP REALT
|
|
;
|
|
;
|
|
;NEXT INTERRUPT SERVICE ROUTINE LADEN
|
|
TRCINT:
|
|
LD (HL_),HL
|
|
PUSH AF
|
|
LD A,3
|
|
OUT (CTC0+2),A ;CTC STOPPEN
|
|
POP AF
|
|
LD HL,NMIBRK
|
|
EX (SP),HL
|
|
RETI
|
|
;********************************************************
|
|
;* *
|
|
;* BREAK *
|
|
;* *
|
|
;********************************************************
|
|
BREAK:
|
|
AND A
|
|
PUSH AF
|
|
LD HL,(BRKADR) ;BREAKPOINT N-1 LOESCHEN
|
|
XOR A
|
|
CP L
|
|
JR NZ,BREAK2
|
|
CP H
|
|
JR Z,BREAK1
|
|
BREAK2 LD A,(INS)
|
|
LD (HL),A
|
|
BREAK1 POP AF
|
|
LD A,(INS)
|
|
LD HL,0
|
|
LD (BRKADR),HL
|
|
RET Z ;RUECKSPRUNG WENN AUFRUF AUS
|
|
;DER REGISTERRETTUNGSROUTINE
|
|
CALL INHZAD ;NEUE BREAKPOINTADRESSE LESEN
|
|
RET Z ;KEINE ADRESSE--> NUR LOESCHEN
|
|
LD A,(HL)
|
|
LD (INS),A ;BYTE RETTEN
|
|
LD (HL),-1 ;NEUEN BREAKPOINT SETZEN
|
|
LD (BRKADR),HL
|
|
RET
|
|
;
|
|
;********************************************************
|
|
;* *
|
|
;* INT-STATUS *
|
|
;* *
|
|
;********************************************************
|
|
;INSTAT
|
|
;LD HL,GOJMP
|
|
;SUB A
|
|
;BIT 3,(HL)
|
|
;JR Z,INSTA1
|
|
;INC A
|
|
;INSTA1
|
|
;CALL BTOHD
|
|
;CALL OUTBYT
|
|
;CALL INBYT
|
|
;RET Z
|
|
INSTA2:
|
|
LD HL,GOJMP
|
|
RES 3,(HL) ;F3H-->DISABLE INT.
|
|
AND A
|
|
RET Z
|
|
SET 3,(HL) ;FBH-->ENABLE INT.
|
|
RET
|
|
;********************************************************
|
|
;* *
|
|
;* I/O-PORT *
|
|
;* *
|
|
;********************************************************
|
|
IOPORT
|
|
CALL NSIGN
|
|
CP 'R'
|
|
JR Z,IOREAD
|
|
CP 'W'
|
|
JP NZ,ERROR
|
|
;
|
|
IOWRITE
|
|
CALL INHZ ;ADRESSE
|
|
IOERR JP Z,ERROR
|
|
PUSH HL
|
|
CALL INHZ ;DATENBYTE
|
|
POP BC
|
|
JR Z,IOERR
|
|
OUT (C),A
|
|
RET
|
|
;
|
|
IOREAD
|
|
CALL INHZ ;ADRESSE
|
|
PUSH HL
|
|
POP BC
|
|
IN A,(C)
|
|
CALL BTOHD
|
|
CALL OUTZL
|
|
RET
|
|
|
|
;********************************************************
|
|
;* *
|
|
;* DISPLAY *
|
|
;* *
|
|
;********************************************************
|
|
DISPL: CALL INHZAD
|
|
PUSH HL
|
|
CALL INHZ
|
|
JR Z,DISP6
|
|
LD B,H
|
|
LD C,L
|
|
POP HL
|
|
EXX
|
|
;
|
|
;CONOBF LOESCHEN
|
|
DISP0: LD HL,CONOBF ;BLOCKTRANSFER
|
|
LD DE,CONOBF+1
|
|
LD BC,49H
|
|
LD (HL),' '
|
|
LDIR
|
|
;
|
|
LD B,10H
|
|
LD HL,CONOBF+53
|
|
LD (HL),'*'
|
|
INC HL
|
|
EXX
|
|
CALL INHZS ;ADRESSE-XXXXH UEBER OUTPTR EINTRAGEN
|
|
DISP1: LD A,(HL)
|
|
EXX
|
|
LD (HL),A
|
|
CP ' ' ;SPACE
|
|
JR C,DISP2
|
|
CP 127 ;128 ZEICHEN AUSGEGEBEN ?
|
|
JR C,DISP3
|
|
DISP2: LD (HL),'.' ;PUNKT EINTRAGEN
|
|
DISP3: INC HL
|
|
LD (HL),'*'
|
|
EXX
|
|
CALL BTOHD ;DATEN EINTAGEN
|
|
CPI
|
|
JP PE,DISP4 ;SPRUNG WENN KEINE ANZAHL EINGEGEBEN
|
|
EXX
|
|
INC HL
|
|
LD (OUTPTR),HL
|
|
JP OUTZL ;AUSGABE DER ZEILE
|
|
;
|
|
;
|
|
DISP4: EXX
|
|
DJNZ DISP5
|
|
INC HL
|
|
LD (OUTPTR),HL
|
|
CALL OUTZL
|
|
JR DISP0 ;NAECHSTE ZEILE AUSGEBEN
|
|
DISP5: EXX
|
|
JR DISP1
|
|
DISP6: POP HL
|
|
DISP7: PUSH HL
|
|
CALL INHZS
|
|
LD A,(HL)
|
|
CALL BTOHD
|
|
CALL OUTBYT
|
|
LD A,':'
|
|
CALL PUTA
|
|
CALL INBYT
|
|
JR Z,DISP8
|
|
POP HL
|
|
LD (HL),A
|
|
PUSH HL
|
|
CALL SSIGK
|
|
DISP8: POP HL
|
|
CP 'Q' ;QUIT
|
|
RET Z
|
|
;RUECKWAERTS EINTRAGEN ?
|
|
CP '^'
|
|
JR NZ,DISP9
|
|
DEC HL
|
|
JR DISP7
|
|
;
|
|
DISP9
|
|
INC HL
|
|
JR DISP7
|
|
;********************************************************
|
|
;* *
|
|
;* FILL *
|
|
;* *
|
|
;********************************************************
|
|
FILL: CALL INHZAD ;ANFANGS-ADRESSE EINLESEN
|
|
JR Z,FILERR
|
|
PUSH HL
|
|
CALL INHZAD ;END-ADRESSE EINLESEN
|
|
FILERR: JP Z,ERROR
|
|
PUSH HL
|
|
CALL INHZ ;KONSTANTE EINLESEN
|
|
LD A,L
|
|
AND A
|
|
POP HL
|
|
POP DE
|
|
LD (DE),A
|
|
SBC HL,DE
|
|
RET Z
|
|
;
|
|
LD B,H ;BLOCKTRANSFER
|
|
LD C,L
|
|
LD H,D
|
|
LD L,E
|
|
INC DE
|
|
LDIR
|
|
RET
|
|
;
|
|
GOGET: CALL NSIGN ;NAECHSTES ZEICHEN EINLESEN
|
|
CP 'E'
|
|
JP Z,BOOT ;JP WENN GET
|
|
CALL INHZ
|
|
JR Z,GO
|
|
LD (PC_),HL
|
|
;
|
|
;********************************************************
|
|
;* *
|
|
;* GO *
|
|
;* *
|
|
;********************************************************
|
|
GO
|
|
REALT
|
|
LD SP,AF_
|
|
POP AF ;REGISTER RUECKSPEICHERN
|
|
POP BC
|
|
POP DE
|
|
EX AF,AF'
|
|
EXX
|
|
POP AF
|
|
POP BC
|
|
POP DE
|
|
POP HL
|
|
POP IX
|
|
POP IY
|
|
EXX
|
|
EX AF,AF'
|
|
POP HL ;PC RUECKSPEICHERN
|
|
LD (GOJMP+2),HL
|
|
LD HL,(HL_) ;HL RUECKSPEICHERN
|
|
LD SP,(SP_) ;SP RUECKSPEICHERN
|
|
JP GOJMP ;SPRUNG IN DEN RAM
|
|
;
|
|
;DANN FOLGT UEBER DIE BEFEHLE: EI ODER DI;A;JP (PC_)
|
|
;DER BEGINN DER ABARBEITUNG DES USER PROGRAMMS
|
|
;
|
|
;
|
|
;********************************************************
|
|
;* *
|
|
;* MOVE *
|
|
;* *
|
|
;********************************************************
|
|
;
|
|
MOVE: CALL INHZAD ;ZIELADRESSE EINLESEN
|
|
PUSH HL
|
|
CALL INHZAD ;QUELLADRESSE EINLESEN
|
|
PUSH HL
|
|
CALL INHZ ;BYTEZAHL EINLESEN
|
|
JP Z,ERROR ;ERROR ANSPRUNG
|
|
LD B,H
|
|
LD C,L
|
|
POP DE
|
|
POP HL
|
|
PUSH HL
|
|
AND A
|
|
SBC HL,DE
|
|
POP HL
|
|
JR C,MOVE1
|
|
LDIR
|
|
RET
|
|
;
|
|
;
|
|
MOVE1: ADD HL,BC
|
|
DEC HL
|
|
EX DE,HL
|
|
ADD HL,BC
|
|
DEC HL
|
|
EX DE,HL
|
|
LDDR
|
|
RET
|
|
;********************************************************
|
|
;* *
|
|
;* REGISTER *
|
|
;* *
|
|
;********************************************************
|
|
;
|
|
REGIST CALL SSIGN
|
|
LD A,CR
|
|
LD D,(HL) ;REGISTERBEZEICHNUNG LADEN
|
|
CP D
|
|
JR Z,ALLREG
|
|
INC HL
|
|
LD E,(HL)
|
|
CP E
|
|
JR NZ,REG16 ;16 BIT REGISTER AUSGEBEN
|
|
LD E,' '
|
|
REG16 CALL REGADR
|
|
DEC HL
|
|
DEC HL
|
|
JP NZ,ERROR
|
|
REGLOP LD DE,CONOBF
|
|
LDI
|
|
LDI
|
|
PUSH HL
|
|
EX DE,HL
|
|
LD (HL),' '
|
|
INC HL
|
|
LD (OUTPTR),HL
|
|
LD E,(IX+0)
|
|
LD D,HL_.SHR.8
|
|
LD A,HLS_+1.AND.0FFH
|
|
SUB E
|
|
JR C,REGOUT
|
|
;
|
|
LD A,(DE)
|
|
CALL BTOHD
|
|
CALL OUTBYT
|
|
LD A,':'
|
|
CALL PUTA
|
|
CALL INBYT
|
|
JR Z,REGEND
|
|
LD (DE),A
|
|
CALL SSIGK
|
|
REGEND: CP 'Q' ;QUIT ?
|
|
POP HL
|
|
RET Z
|
|
;
|
|
INC IX
|
|
LD A,LADRRB-1.AND.0FFH
|
|
SUB L
|
|
JR NC,REGLOP
|
|
RET
|
|
;
|
|
;
|
|
REGOUT: LD A,(DE)
|
|
LD L,A
|
|
INC DE
|
|
LD A,(DE)
|
|
LD H,A
|
|
PUSH DE
|
|
CALL BTOHA
|
|
CALL OUTBYT
|
|
LD A,':'
|
|
CALL PUTA
|
|
CALL INBYT
|
|
POP DE
|
|
JR Z,REGEND
|
|
EX DE,HL
|
|
LD (HL),D
|
|
DEC HL
|
|
LD (HL),E
|
|
CALL SSIGK
|
|
JR REGEND
|
|
;
|
|
;ALLE REGISTER AUSGEBEN
|
|
ALLREG: CALL OUTRB ;AUSGABE REGISTERBEZEICHNUNGEN
|
|
CALL OUTRW ;AUSGABE REGISTERWERTE
|
|
RET
|
|
;
|
|
;
|
|
;
|
|
;********************************************************
|
|
;* *
|
|
;* UNTERPROGRAMME *
|
|
;* *
|
|
;********************************************************
|
|
INHZS: PUSH HL ;ADRESSENUMSCHALTUNG MONITOR-->USER
|
|
LD DE,0
|
|
AND A ;CARRY=0
|
|
SBC HL,DE ;1000H ODER 0 SUBTRAHIEREN
|
|
CALL BTOHA ;KONVERTIERT EINE ADRESSE IN DAS
|
|
POP HL ;HEXA-SYSTEM
|
|
RET
|
|
;
|
|
;
|
|
;AUSGABE DER REGISTERBEZEICHNUNGEN AUF RAM-BEREICH
|
|
OUTRB: LD DE,CONOBF ;AUSGABE:A,B,C,D,E,F,H,L,I UND STRICHREG.
|
|
LD HL,REGBEZ
|
|
LD B,11H
|
|
LD A,' '
|
|
OUTB1: LD C,0FFH
|
|
LDI ;REGISTERBEZ.-->(DE)
|
|
LDI ;SPACE-->(DE)
|
|
LD (DE),A ;SPACE--> (DE)
|
|
INC DE
|
|
DJNZ OUTB1
|
|
;
|
|
LD B,4 ;AUSGABE:IX,IY,PC UND SP
|
|
OUTB2: LD C,0FFH
|
|
LD (DE),A
|
|
INC DE
|
|
LDI
|
|
LDI
|
|
LD (DE),A
|
|
INC DE
|
|
LD (DE),A
|
|
INC DE
|
|
DJNZ OUTB2
|
|
;
|
|
LD (OUTPTR),DE ;LETZTE ADR DER ZEICHENKETTE RETTEN
|
|
JR OUTW3
|
|
;
|
|
;*********************************************************************
|
|
;AUSGABE DER REGISTERWERTE AUF RAM-BEREICH
|
|
OUTRW: LD B,17 ;ZAEHLER HL_,I_,AF_,BC_ ...
|
|
LD IX,LADRRB
|
|
LD D,HL_.SHR.8
|
|
OUTW1: LD E,(IX+0) ;DE ZEIGT AUF REGISTERRETTUNGSBEREICH
|
|
LD A,(DE)
|
|
CALL BTOHD
|
|
INC IX
|
|
DJNZ OUTW1
|
|
LD B,4 ;ZAEHLER IX_,IY_,PC_,SP_
|
|
OUTW2: LD E,(IX+0)
|
|
EX DE,HL
|
|
LD E,(HL)
|
|
INC HL
|
|
LD D,(HL)
|
|
EX DE,HL
|
|
CALL BTOHA
|
|
INC IX
|
|
DJNZ OUTW2
|
|
;
|
|
OUTW3: JP OUTZL ;AUSGABE EINER ZEILE
|
|
;
|
|
;*********************************************************************
|
|
;STANDARD PARAMETERVEKTOR FUER PCON INITIALISIEREN
|
|
;ASC-ZEICHEN EINLESEN
|
|
INASC: LD IY,CONIV ;CONIVC-->CONSOLE INPUT VECTOR
|
|
LD HL,CONIBF ;DATA TRANSFERADRESS LADEN
|
|
LD (CONIV+2),HL
|
|
LD (INPTR),HL
|
|
LD HL,0FFH ;DATA LENGTH LADEN
|
|
LD (CONIV+4),HL
|
|
LD (IY+1),RDASC ;REQUEST CODE LADEN
|
|
CALL PCON ;AUGABE AUF TERMINAL
|
|
LD A,(CONIBF) ;A:=ASC-ZEICHEN
|
|
RET
|
|
;*********************************************************************
|
|
;
|
|
;SUCHT NAECHSTES ZEICHEN=/SPACE & KLEINBUCHSTABEN RUECKSETZEN
|
|
;
|
|
SSIGK: CALL SSIGN
|
|
RES 5,A
|
|
RET
|
|
;
|
|
;
|
|
;*********************************************************************
|
|
;NAECHSTES ZEICHEN EINLESEN
|
|
NSIGN: INC HL
|
|
LD A,(HL)
|
|
RES 5,A ;KLEINBUCHSTABEN RUECKSETZEN
|
|
RET
|
|
;
|
|
;SUCHT NAECHSTES ZEICHEN=/SPACE
|
|
;
|
|
SSIGN: LD HL,(INPTR) ;ADR.DER PARAMETERLISTE
|
|
SSIG1: LD A,(HL) ;ASCII-ZEICHEN EINLESEN
|
|
CP ' '
|
|
JR NZ,SSIG4
|
|
;
|
|
SSIG2: INC HL
|
|
LD A,(HL)
|
|
CP ' '
|
|
JR Z,SSIG2 ;SPACE UEBERGEHEN
|
|
;
|
|
SSIG3: LD (INPTR),HL ;INPTR ZEIGT AUF 1.ZEICHEN=/SPACE
|
|
RET
|
|
;
|
|
SSIG4: CP CR ;CARRIAGE RETURN
|
|
JR Z,SSIG3
|
|
INC HL
|
|
JR SSIG1
|
|
;
|
|
;************************************************************************
|
|
;EINLESEN VON HEXA-DEZIMALZAHLEN
|
|
;OUTPUT:BIN-ZAHL IN HL
|
|
;
|
|
INHZ: LD HL,0
|
|
PUSH HL
|
|
ADD HL,SP ;HL:=SP
|
|
EX DE,HL ;DE:=SP
|
|
CALL SSIGN
|
|
CP CR ;CARRIAGE RETURN
|
|
EX DE,HL
|
|
JR NZ,INHZ1
|
|
;
|
|
POP HL
|
|
LD A,L
|
|
RET
|
|
;
|
|
INHZ1: CP 30H ;0
|
|
KERRO: JP C,ERROR ;SPRUNG WENN SONDERZEICHEN
|
|
INHZ3: CP 40H ;ZAHLEN ODER BUCHSTABEN
|
|
JR C,INHZ4 ;SPRUNG WENN ZAHLEN 0....9
|
|
RES 5,A
|
|
INHZ4: CALL HTOB ;BIN-ZAHL IN L-TETRADE VON A
|
|
RLD
|
|
INC HL
|
|
JPGET1: RLD ;EINSPRUNG AUS GET AUF 2.BYTE
|
|
DEC HL
|
|
INC DE ;INPTR:=INPTR+1
|
|
LD A,(DE) ;NAECHSTES ASCII-ZEICHEN EINLESEN
|
|
CP 30H ;SPRUNG WENN HEXA-ZEICHEN
|
|
JR NC,INHZ3
|
|
;
|
|
;
|
|
POP HL ;SPACE GELESEN !
|
|
LD A,L
|
|
RET
|
|
;
|
|
;************************************************************************
|
|
;KONVERTIERT EINE HEXA-ZAHL INEINE 4 BIT-ZAHL
|
|
;
|
|
HTOB: CP 3AH ;TEST: ZAHLEN VON 0....9
|
|
JR C,HTOB1
|
|
CP 'A' ;TEST: BUCHSTABEN VON A....F
|
|
JR C,KERRO ;SPRUNG WENN FEHLER-->KEIN HEXA-ZEICHEN
|
|
CP 'G' ;TEST: ASCII-ZEICHEN > 'G' -->KEINE
|
|
JP NC,ERROR ;HEXA-ZEICHEN
|
|
SUB 7
|
|
HTOB1: AND 0FH
|
|
RET
|
|
;
|
|
;*********************************************************************
|
|
;BTOHA:KONVERTIERT 2 DURCH(OUTPTR) ADRESSIERTE RAM-PLAETZE (ADRESSEN)
|
|
;IN DAS HEXADEZIMALSYSTEM
|
|
;INPUT:BIN-ZAHL IN HL
|
|
BTOHA: PUSH DE
|
|
LD A,H
|
|
CALL BTOHD
|
|
LD DE,(OUTPTR) ;OUTPTR LADEN
|
|
DEC DE ;SPACE EINTRAGUNG IN BTOHD RUECKSETZEN
|
|
LD (OUTPTR),DE
|
|
POP DE
|
|
LD A,L
|
|
;
|
|
BTOHD: PUSH HL
|
|
LD HL,(OUTPTR)
|
|
CALL BTOHE
|
|
INC HL
|
|
LD (HL),' '
|
|
INC HL
|
|
LD (OUTPTR),HL
|
|
POP HL
|
|
RET
|
|
;
|
|
;*********************************************************************
|
|
;BTOHEX: KONVERTIERT EINE 8-BIT BIN-ZAHL IN EINE HEXA-ZAHL
|
|
BTOHE: PUSH AF
|
|
RRA
|
|
RRA
|
|
RRA
|
|
RRA
|
|
CALL HBTHE ;KONVERTIERT DIE 4 HOEHERWERTIGEN BITS
|
|
INC HL
|
|
POP AF
|
|
CALL HBTHE ;KONVERTIERT DIE 4 NIEDERWERTIGEN BITS
|
|
RET
|
|
;
|
|
;********************************************************************
|
|
;HBTHEX: KONVERTIERT EINE 4-BIT BIN-ZAHL IN EIN HEXA-ASCII-ZEICHEN
|
|
HBTHE: AND 0FH
|
|
CP 10 ;DEZIMALZEICHEN ?
|
|
JR C,HB10
|
|
ADD A,7
|
|
HB10: ADD A,30H
|
|
LD (HL),A ;ZEICHEN IN RAM-BEREICH LADEN
|
|
RET
|
|
;
|
|
;*********************************************************************
|
|
REGADR: LD IX,LADRRB
|
|
LD A,D
|
|
LD BC,2AH
|
|
LD HL,REGBEZ ;REGISTERBEZEICHNUNGEN
|
|
REGAD0: CPI
|
|
JR Z,REGAD2
|
|
CPI
|
|
;EINSPRUNG AUS GET AUF REGAD1
|
|
JPGET2
|
|
REGAD1: RET PO
|
|
INC IX
|
|
JR REGAD0
|
|
;
|
|
REGAD2: LD A,E
|
|
CP 2FH
|
|
JR C,REGAD3
|
|
RES 5,A
|
|
REGAD3: CPI
|
|
RET Z
|
|
LD A,D
|
|
JR REGAD1
|
|
;
|
|
INBYT: LD A,' '
|
|
LD (PROMPT),A
|
|
CALL INASC ;EINGABE ASC-ZEICHEN UEBER PCON
|
|
RES 5,A
|
|
CP 'Q' ;QUIT ?
|
|
RET Z
|
|
CP '^'
|
|
RET Z ;ADRESSE BEI DISP ZURUECKSTELLEN
|
|
LD HL,CONIBF-1
|
|
LD (HL),' '
|
|
LD (INPTR),HL
|
|
PUSH DE
|
|
CALL INHZ
|
|
POP DE
|
|
RET
|
|
;
|
|
;
|
|
;AUSGABE EINER ZEILE
|
|
OUTZL: LD A,85H ;ZEILENLAENGE LADEN
|
|
OUTZV: PUSH HL ;EINSPRUNG FUER AUSGABE MIT
|
|
;VARIABLER ZEILENLAENGE
|
|
LD HL,(OUTPTR)
|
|
LD (HL),CR ;CARRIAGE RETURN AN ZEICHENKETTE ANFUEGEN
|
|
LD HL,CONOBF ;BEGINN DER ZEICHENKETTE IM RAM (CONOBV)
|
|
LD (OUTPTR),HL ;OUTPTR INITIALISIEREN
|
|
DEC HL
|
|
OUTZ: LD (HL),A
|
|
CALL OUTAS ;AUSGABE ASC-ZEICHEN UEBER PCON
|
|
POP HL
|
|
RET
|
|
;
|
|
;*********************************************************************
|
|
;
|
|
OUTBYT: PUSH HL
|
|
PUSH DE
|
|
LD HL,(OUTPTR)
|
|
LD DE,CONOBF ;BEGINN DER ZEICHENKETTE IM RAM
|
|
LD (OUTPTR),DE
|
|
AND A
|
|
SBC HL,DE ;ANZAHL DER AUSZUGEBENDEN ZEICHEN
|
|
EX DE,HL
|
|
DEC HL
|
|
LD (HL),E
|
|
CALL OUTAS
|
|
POP DE
|
|
POP HL
|
|
RET
|
|
;
|
|
;********************************************************************
|
|
;MOEGLICHKEIT ZUR ADRESSVERSCHIEBUNG
|
|
;ADRESSE:=ADRESSE+(ADRFLG)
|
|
;
|
|
INHZAD: CALL INHZ
|
|
LD DE,0
|
|
ADD HL,DE
|
|
RET
|
|
;
|
|
;*********************************************************************
|
|
;STANDARD PARAMETERVEKTOR FUER PCON INITIALISIEREN
|
|
;ASC-ZEICHEN AUSGEBEN
|
|
OUTAS: LD IY,CONOV ;IY:=CONOVC
|
|
LD A,(HL) ;A:=DATA LENGTH
|
|
INC HL
|
|
LD (CONOV+2),HL
|
|
LD (IY+4),A ;DATA LENGTH LADEN
|
|
LD (IY+5),0
|
|
LD (IY+1),WRASC
|
|
;********************************************************
|
|
;* *
|
|
;* PROM CONSOLTREIBER *
|
|
;* *
|
|
;********************************************************
|
|
PCON: PUSH DE
|
|
PUSH BC
|
|
LD A,(IY+1) ;REQUEST CODE LADEN
|
|
RES 0,A
|
|
CP RDBIN
|
|
JR NC,PCO2 ;TEST UNTERE GRENZE REQUEST CODE
|
|
PCO0: LD (IY+10),NRET ;COMPLETION CODE LADEN
|
|
PCO4: POP BC
|
|
POP DE
|
|
BIT 6,(IY+10)
|
|
JR Z,PCO1 ;JMPIF VALID OPERATION REQUEST CODE
|
|
PCONOUT
|
|
LD H,(IY+9) ;ERROR RETURN ADRESS LADEN
|
|
LD L,(IY+8)
|
|
LD A,H
|
|
OR L
|
|
JR Z,PCO1 ;JMP IF ERROR RETURN ADRESS =0
|
|
JP (HL) ;JMP TO ERROR DOKUMENTATION
|
|
;
|
|
PCONEND
|
|
PCO1
|
|
BIT 0,(IY+1) ;REQUEST CODE INCREASED ?
|
|
RET Z ;RUECKSPRUNG
|
|
LD H,(IY+7) ;HL:= COMPLETION RETURN ADRESS
|
|
LD L,(IY+6)
|
|
JP (HL)
|
|
;
|
|
;
|
|
PCO2: CP 11H ;TEST OBERE GRENZE REQUEST CODE
|
|
JR C,PCO3
|
|
LD (IY+10),0C1H ;INVALID OPERATION REQUEST
|
|
JR PCO4
|
|
;
|
|
PCO3: LD H,A ;H:=REQUEST CODE
|
|
LD A,(IY+4)
|
|
OR (IY+5) ;DATA LENGTH=0 ?
|
|
JR Z,PCO0
|
|
LD A,H ;A:=REQUEST CODE
|
|
LD H,(IY+3) ;HL:=DATA TRANSFER ADRESS
|
|
LD L,(IY+2)
|
|
LD B,(IY+5) ;BC:=DATA LENGTH
|
|
LD C,(IY+4)
|
|
CP WRBIN
|
|
JR C,PCO5 ;JMP IF RDASC OR RDBIN
|
|
JR Z,PCWBIN ;JMP IF WRBIN
|
|
;************************************************
|
|
;* *
|
|
;* WRITE-ASCII *
|
|
;* *
|
|
;************************************************
|
|
;
|
|
PCWASC: LD A,(HL)
|
|
CALL PUTA ;AUSGABE EINES ZEICHENS
|
|
INC HL
|
|
DEC BC ;DATA LENGTH -1
|
|
CP CR
|
|
JR Z,PCNL ;NL AUSGEBEN
|
|
;
|
|
LD A,C
|
|
OR B
|
|
JR NZ,PCWASC
|
|
PCO10: LD H,(IY+5) ;HL:=DATA LENGTH
|
|
LD L,(IY+4)
|
|
SBC HL,BC
|
|
LD (IY+5),H
|
|
LD (IY+4),L
|
|
JR PCO0
|
|
;
|
|
;CARRIAGE RETURN UND (NULLCT) X LINEFEED AUSGEBEN
|
|
PCNL: PUSH BC
|
|
LD A,LF
|
|
CALL PUTA ;LINEFEED AUSGEBEN
|
|
LD A,(NULLCT)
|
|
AND A
|
|
JR Z,PCO8
|
|
LD B,A
|
|
SUB A
|
|
PCLF: CALL PUTA ;LINEFEED'S :=(NULLCT) AUSGEBEN
|
|
DJNZ PCLF
|
|
;
|
|
;
|
|
PCO8: POP BC
|
|
JR PCO10
|
|
;************************************************
|
|
;* *
|
|
;* WRITE-BINARY *
|
|
;* *
|
|
;************************************************
|
|
PCWBIN: LD A,(HL)
|
|
CALL PUTA
|
|
CPI
|
|
JP PE,PCWBIN
|
|
JR PCO10
|
|
PCO5: CP RDBIN
|
|
JR NZ,PCRASC
|
|
;************************************************
|
|
;* *
|
|
;* READ-BINARY *
|
|
;* *
|
|
;************************************************
|
|
PCRBIN: CALL GETA
|
|
JR Z,PCRBIN
|
|
LD (HL),A
|
|
CPI
|
|
JP PE,PCRBIN ;SPRUNG WENN BC =/= 0
|
|
JR PCO10
|
|
;************************************************
|
|
;* *
|
|
;* READ-ASCII *
|
|
;* *
|
|
;************************************************
|
|
PCRASC: LD A,(PROMPT)
|
|
CALL PUTA ;AUSGABE (PROMPT)
|
|
PUSH HL ;DATA TRANSFER ADRESS
|
|
PCRA1: CALL RPAR ;ZEICHEN EINLESEN&PARITAETSBIT RUECKSETZEN
|
|
LD (HL),A
|
|
PUSH HL
|
|
LD H,A
|
|
LD A,(CARDEL) ;CARDEL
|
|
CP H
|
|
JR NZ,PCRA2
|
|
;
|
|
;
|
|
;
|
|
;CHARDEL ERKANNT !
|
|
;****************
|
|
POP HL
|
|
DEC HL ;DATA TRANSFER ADRESS -1
|
|
INC BC ;DATA LENGTH +1
|
|
POP DE
|
|
PUSH HL
|
|
SBC HL,DE
|
|
POP HL
|
|
PUSH DE
|
|
JR NC,PCRA1
|
|
JR PCLD1
|
|
;
|
|
PCRA2: LD A,(LINDEL) ;LINDEL
|
|
CP H
|
|
JR NZ,PCO16
|
|
;
|
|
;LINDEL ERKANNT !
|
|
;****************
|
|
PCLDEL: POP HL
|
|
PCLD1: POP HL
|
|
PUSH HL
|
|
LD B,(IY+5) DATA LENGTH NEULADEN
|
|
LD C,(IY+4)
|
|
JR PCRA1 ;NEUE ZEILE EINGEBEN
|
|
;
|
|
PCO16: LD A,H
|
|
POP HL
|
|
INC HL ;DATA TRANSFER ADRESS
|
|
DEC BC ;DATA LENGTH
|
|
POP DE
|
|
CP CR ;ENDE DER ZEILE ?
|
|
JR Z,PCNL
|
|
LD A,C
|
|
OR B
|
|
JR Z,PCO10
|
|
PUSH DE
|
|
JR PCRA1
|
|
;
|
|
RPAR: CALL GETA
|
|
JR Z,RPAR
|
|
RES 7,A
|
|
CALL PUTA
|
|
RET
|
|
*E
|
|
;*******************************************************
|
|
;*
|
|
;* ZUSAETZLICHE VEREINBARUNGEN *
|
|
;*
|
|
;*******************************************************
|
|
|
|
|
|
SIOTAB
|
|
DEFW ISRSET
|
|
DEFW ISRZET
|
|
DEFW ISRSET
|
|
;
|
|
SDERR DEFB 18
|
|
DEFM 'INSERT SYSTEMDISK'
|
|
DEFB 0DH
|
|
|
|
|
|
KBC0 DEFB 12H
|
|
DEFB 0CFH ;BIT CONTROL
|
|
DEFB 7FH ;NUR BIT 7 AUSGABE
|
|
DEFB 037H ;EI/HIGH-AKTIV/MASK FOLGT
|
|
DEFB 0FEH ;NUR BIT 0 AKT. INTERRUPT
|
|
|
|
*E
|
|
;********************************************************
|
|
;* *
|
|
;* TREIBERPROGRAMME ZUR HARDWAREANPASSUNG *
|
|
;* *
|
|
;********************************************************
|
|
;
|
|
; !!! D I S P L A Y !!!
|
|
*INCLUDE OUTA.S
|
|
; !!! T A S T A T U R !!!
|
|
*INCLUDE INA.S
|
|
;
|
|
; !!! F L O P P Y - T R E I B E R !!!
|
|
*INCLUDE FLOPPY.S
|
|
;
|
|
|
|
;
|
|
|
|
;
|
|
;********************************************************
|
|
ORG 0B71H
|
|
;* *
|
|
;* PROM-VEREINBARUNGEN *
|
|
;* *
|
|
;********************************************************
|
|
TBREA: DEFT 'BREAK '
|
|
;
|
|
TDERR: DEFB 11
|
|
DEFM 'DISK ERROR'
|
|
DEFB CR ;CARRIAGE RETURN
|
|
;
|
|
FRAGZ: DEFT '?'
|
|
REGBEZ: DEFM 'A B C D E F H L I '
|
|
DEFM 'A''B''C''D''E''F''H''L'''
|
|
DEFM 'IXIYPCSP'
|
|
;LOW-ADRESSEN DES REGISTERRETTUNGSBEREICHES
|
|
LADRRB: DEFB AF_+1.AND.0FFH
|
|
DEFB BC_+1.AND.0FFH
|
|
DEFB BC_.AND.0FFH
|
|
DEFB DE_+1.AND.0FFH
|
|
DEFB DE_.AND.0FFH
|
|
DEFB AF_.AND.0FFH
|
|
DEFB HL_+1.AND.0FFH
|
|
DEFB HL_.AND.0FFH
|
|
DEFB I_.AND.0FFH
|
|
DEFB AFS_+1.AND.0FFH
|
|
DEFB BCS_+1.AND.0FFH
|
|
DEFB BCS_.AND.0FFH
|
|
DEFB DES_+1.AND.0FFH
|
|
DEFB DES_.AND.0FFH
|
|
DEFB AFS_.AND.0FFH
|
|
DEFB HLS_+1.AND.0FFH
|
|
DEFB HLS_.AND.0FFH
|
|
DEFB IX_.AND.0FFH
|
|
DEFB IY_.AND.0FFH
|
|
DEFB PC_.AND.0FFH
|
|
DEFB SP_.AND.0FFH
|
|
;*********************************************************************
|
|
;BASISVARIABLE: IM RAM AB NULLCT ABGESPEICHERT
|
|
BASVAR: DEFB 00H ;NULLCT
|
|
DEFB 01H ;LFCNT
|
|
DEFB 3EH ;PROMPT (>)
|
|
DEFB 7FH ;LINDEL (RUBOUT)
|
|
DEFB 08H ;CARDEL (BACKSPACE)
|
|
DEFB 00H ;BRKFLG
|
|
DEFW 00H ;BRKRETN
|
|
DEFW 00H ;DSKVSL
|
|
WRNGINIT:
|
|
DEFB 10 ;CRC RETRY
|
|
DEFB 3 ;WRONG SECTOR RETRY
|
|
DEFB 3 ;WRONG TRACK RETRY
|
|
;ENDE DES BLOCKES DER BASISVARIABLEN
|
|
;***********************************
|
|
;
|
|
|
|
KENNSD DEFM 'P8000SYS'
|
|
ORG 0BDFH
|
|
; BFOS SPRUNGVERTEILER
|
|
;
|
|
;
|
|
JP BTOHE
|
|
JP READY ;LW-READY TEST
|
|
JP PRESS ;CONSOL-STATUS TEST
|
|
JP GETA ;SPRUNG ZU GETA
|
|
JP PUTA
|
|
JP PCON
|
|
JP OUTAS ;AUSGABE ASC-ZEICHEN UEBER PCON
|
|
JP SSIGN
|
|
JP BDEC
|
|
JP DEBUG
|
|
JP DISK
|
|
*E
|
|
;*********************************************************************
|
|
;* *
|
|
;* RAM-BEREICH *
|
|
;* *
|
|
;*********************************************************************
|
|
ORG 0C00H
|
|
KOMINT: DEFS 100H ;ANFANG SYSTEMSTACK
|
|
STACK: DEFS 1 ;ENDE SYSTEMSTACK
|
|
;
|
|
XINT: DEFS 2
|
|
CONOBC: DEFS 1
|
|
CONOBF: DEFS 133
|
|
;
|
|
DEFS 1
|
|
CONIBF: DEFS 255-37
|
|
;KOMMANDOTABELLE FUER DEN FDC, MINI- UND STANDARDLAUFWERKE
|
|
FDCTAB DEFS 9
|
|
PR1 DEFS 1
|
|
PR2 DEFS 1
|
|
GPL2 DEFS 1
|
|
TRK DEFS 1
|
|
CMD DEFS 1
|
|
;KOMMANDOTABELLE FUER DEN DMA
|
|
DMALSW DEFS 10
|
|
;RESULTATSTABELLE DER FDC-KOMMANDOS
|
|
RESUL DEFS 7
|
|
;TABELLE DER MOTORLAUFZEITEN
|
|
TTAB DEFS 4
|
|
;
|
|
;Merkzelle fuer Laufwerkmaske
|
|
DMASK DEFS 1
|
|
FDTYP DEFS 1
|
|
;
|
|
;DISK PARAMETER VEKTOR1-->IM DEBUGER GELADEN
|
|
DPAVEC: DEFS 1 ;IGNORED
|
|
DEFS 1 ;IY+1 -->REQUEST-CODE
|
|
DEFS 2 ;IY+2,3 -->DATA TRANSFERADRESS
|
|
DEFS 2 ;IY+4,5 -->DATA LENGTH
|
|
DEFS 2 ;IY+6,7 -->COMPLETION RETURN ADRESS
|
|
DEFS 2 ;IY+8,9 -->ERROR RETURN ADRESS
|
|
DEFS 1 ;IY+10 -->COMPLETION CODE
|
|
DEFS 2 ;IY+11,12 -->DISK ADRESS
|
|
;
|
|
;DISK PARAMETER VEKTOR2-->WIRD IN DISK GELADEN
|
|
BFFADD: DEFS 2 ;IY+2,3 -->DATA TRANSFER ADRESS
|
|
BFFLEN: DEFS 2 ;IY+4,5 -->DATA LENGTH
|
|
INTPNT: DEFS 2
|
|
RQTRK: DEFS 1 ;REQUEST-TRACK & H-TEIL DISK ADRESSE
|
|
RQSECT: DEFS 1 ;IY+11 -->SECTOR ADRESS
|
|
V2TADR: DEFS 1 ;IY+12 -->TRACK ADRESS
|
|
;
|
|
BCKPTR: DEFS 2 ;ZEIGER ZUM VORHERGEHENDEN SECTOR
|
|
FORPTR: DEFS 2 ;ZEIGER ZUM NAECHSTEN SECTOR
|
|
CRC: DEFS 4
|
|
;
|
|
HL_: DEFS 2
|
|
INT: DEFS 1 ;INT.-ENABLE FLIP-FLOP
|
|
I_: DEFS 1
|
|
AF_: DEFS 2
|
|
BC_: DEFS 2
|
|
DE_: DEFS 2
|
|
AFS_: DEFS 2
|
|
BCS_: DEFS 2
|
|
DES_: DEFS 2
|
|
HLS_: DEFS 2
|
|
IX_: DEFS 2
|
|
IY_: DEFS 2
|
|
PC_: DEFS 2
|
|
SP_: DEFS 2
|
|
;
|
|
DEFS 2 ;FREI
|
|
;
|
|
CONOV: DEFS 11 ;CONSOLE OUTPUT-VECTOR
|
|
CONIV: DEFS 11 ;CONSOLE INPUT-VECTOR
|
|
DEFS 2 ;SEKTORLAENGE
|
|
PCONF: DEFS 1 ;FREI
|
|
N_ DEFS 1 ;NEXT MERKER
|
|
;
|
|
DSEL: DEFS 2
|
|
INS: DEFS 1
|
|
BRKADR: DEFS 2
|
|
EIADR DEFS 2
|
|
EIINS DEFS 1
|
|
;
|
|
CRCERR DEFS 2
|
|
SECERR DEFS 2
|
|
TRKERR DEFS 2
|
|
;
|
|
FDCONF DEFS 2 ; MERKZELLE FUER DISK-KONFIGURATION
|
|
SPURNR DEFS 1 ; MERKZELLE FUER DIE SPURNUMMER
|
|
;
|
|
APEIN DEFS 1 ; ADRESSE FUER AKTUELLEN STAND IM RINGPUFFER
|
|
APAUS DEFS 1
|
|
MCSQ DEFS 1
|
|
MFDC DEFS 1
|
|
DEFS 14 ; FREI
|
|
;
|
|
; TABELLEN DER INTERRUPTSERVICEROUTINEN VON ALLEN AUF DEM 8-BIT-TEIL
|
|
; BEFINDLICHEN PERIPHERIESCHALTKREISEN:
|
|
; CTC0, CTC1, SIO1, SIO2, PIO1, PIO2, PIO3, FDC, DMA
|
|
;
|
|
; CTC0:
|
|
ITABC0
|
|
DEFS 2 ; KANAL 0, NICHT BELEGT
|
|
DEFS 2 ; KANAL 1, NICHT BELEGT
|
|
ISNEXT DEFS 2 ; KANAL 2, BELEGT DURCH NEXT-INTERRUPT IN NEXT
|
|
RDYMIN DEFS 2 ; KANAL 3, BELEGT DURCH ZEIT-INTERRUPT FUER MINI-LAUFWERKE
|
|
;
|
|
; CTC1:
|
|
ITABC1
|
|
DEFS 2 ;
|
|
DEFS 2 ;
|
|
DEFS 2 ;
|
|
DEFS 2 ;
|
|
;
|
|
; PIO0:
|
|
ITABP0
|
|
IP0KA DEFS 2 ;
|
|
IP0KB DEFS 2
|
|
;
|
|
; PIO1:
|
|
ITABP1
|
|
IP1KA DEFS 2
|
|
IP1KB DEFS 2 ;
|
|
;
|
|
; PIO2:
|
|
ITABP2
|
|
IP2KA DEFS 2 ; INTERRUPTSERVICEROUTINE FUER INTERRUPT VOM FDC
|
|
IP2KB DEFS 2 ; HIER WIRD OHNE INTERRUPT GEARBEITET
|
|
;
|
|
; DMA:
|
|
ITABD
|
|
DEFS 2 ; INTERRUPTADRESSE FUER DMA, GENUTZT FUER FLOPPY-ARBEIT
|
|
;
|
|
DEFS 2 ; FREI
|
|
;
|
|
; SIO0:
|
|
ITABS0
|
|
IS0B1 DEFS 2 ;
|
|
IS0B2 DEFS 2 ; ISRSET
|
|
IS0B3 DEFS 2 ; ISRZET
|
|
IS0B4 DEFS 2 ; ISRSET
|
|
IS0A1 DEFS 2
|
|
IS0A2 DEFS 2
|
|
IS0A3 DEFS 2
|
|
IS0A4 DEFS 2
|
|
;
|
|
; SIO1:
|
|
ITABS1
|
|
IS1B1 DEFS 2
|
|
IS1B2 DEFS 2
|
|
IS1B3 DEFS 2
|
|
IS1B4 DEFS 2
|
|
IS1A1 DEFS 2
|
|
IS1A2 DEFS 2
|
|
IS1A3 DEFS 2
|
|
IS1A4 DEFS 2
|
|
;
|
|
INVEK: DEFS 96
|
|
;
|
|
USRSTK: DEFS 2 ;USER-STACK
|
|
DATE:
|
|
DEFS 6
|
|
TIMEZG: DEFS 12
|
|
ERRCOD: DEFS 1
|
|
EXTRET: DEFS 2
|
|
MEMTOP: DEFS 2
|
|
MEMBOT: DEFS 2
|
|
INPTR: DEFS 2 ;ZEIGT AUF DIE AKTUELLE ADRESSE IN CONIBF
|
|
OUTPTR: DEFS 2 ;ZEIGT AUF DIE AKTUELLE ADRESSE IN CONOB
|
|
;
|
|
;BASIS-VARIABLENFELD ANFANG
|
|
NULLCT: DEFS 1 ;NULLCT
|
|
LFCNT: DEFS 1 ;LINE FEED COUNTER
|
|
PROMPT: DEFS 1 ;PROMPT >
|
|
LINDEL: DEFS 1 ;LINDEL !
|
|
CARDEL: DEFS 1 ;CARDEL @
|
|
BRKFLG: DEFS 1 ;BRKFLG
|
|
BRKRET: DEFS 2 ;BRKRET
|
|
;
|
|
DSKVSL: DEFS 2 ;DISK-SCHLUESSELZELLE
|
|
DEFS 2 ;FREI
|
|
CRCCTR: DEFS 1
|
|
WSCTR: DEFS 1
|
|
WTCTR: DEFS 1
|
|
CURT0: DEFS 8
|
|
CURTRK: DEFS 1
|
|
MZNEXT DEFS 1 ;MERKZELLE NEXTROUTINE
|
|
DEFS 4 ;FREI
|
|
GOJMP: DEFS 1 ;INTERRUPT MODE FUER REALTIME START
|
|
DEFS 3 ;JP (SAVPC) -->IN GO GELADEN
|
|
;
|
|
RINGP DEFS 20H ;Ringpuffer fuer die Eingabe von der Tastatur
|
|
;
|
|
;
|
|
;*********************************************************************
|
|
;* *
|
|
;*VEREINBARUNGSTEIL *
|
|
;* *
|
|
;*********************************************************************
|
|
;DATEN
|
|
NRET: EQU 80H ;NORMAL RETURN
|
|
;STEUERWORTE
|
|
RDBIN: EQU 0AH ;REQUEST CODES
|
|
WRBIN: EQU 0EH
|
|
RDASC: EQU 0CH
|
|
WRASC: EQU 10H
|
|
;I/O-ADRESSEN
|
|
; VEREINBARUNGEN
|
|
CTC0: EQU 008H ;
|
|
CTC1 EQU 02CH
|
|
;
|
|
SIO0 EQU 024H
|
|
S0AD EQU SIO0
|
|
S0AC EQU SIO0+1
|
|
S0BD EQU SIO0+2
|
|
S0BC EQU SIO0+3
|
|
;
|
|
SIO1 EQU 028H
|
|
S1AD EQU SIO1
|
|
S1AC EQU SIO1+1
|
|
S1BD EQU SIO1+2
|
|
S1BC EQU SIO1+3
|
|
;
|
|
PIO0 EQU 0CH
|
|
P0AD EQU PIO0
|
|
P0AC EQU PIO0+1
|
|
P0BD EQU PIO0+2
|
|
P0BC EQU PIO0+3
|
|
;
|
|
PIO1 EQU 018H
|
|
P1AD EQU PIO1
|
|
P1AC EQU PIO1+1
|
|
P1BD EQU PIO1+2
|
|
P1BC EQU PIO1+3
|
|
;
|
|
PIO2 EQU 1CH
|
|
P2AD EQU PIO2
|
|
P2AC EQU PIO2+1
|
|
P2BD EQU PIO2+2
|
|
P2BC EQU PIO2+3
|
|
;
|
|
DMAADR EQU 3CH
|
|
;
|
|
;
|
|
R0 EQU 0
|
|
R1 EQU 1
|
|
R2 EQU 2
|
|
R3 EQU 3
|
|
R4 EQU 4
|
|
R5 EQU 5
|
|
R6 EQU 6
|
|
R7 EQU 7
|
|
;
|
|
COMM6 EQU 30H ; FEHLER RUECKSETZEN
|
|
COMM3 EQU 18H ; KANAL RUECKSETZEN
|
|
COMM2 EQU 10H ; RUECKSETZEN EXT./STAT. INTERRUPT
|
|
NOPRTY EQU 0 ; PARITAETSPRUEFUNG AUSSCHALTEN
|
|
S2 EQU 0CH ; 2 STOP/BITS JE ZEICHEN
|
|
C16 EQU 40H ; *16
|
|
RENABLE EQU 1
|
|
B8 EQU 0C0H
|
|
XENABLE EQU 8
|
|
T8 EQU 60H
|
|
PDAVCT EQU 18H
|
|
SAVECT EQU 04H
|
|
XMTRIE EQU 02H
|
|
;
|
|
CR EQU 0DH
|
|
LF EQU 0AH
|
|
C32 EQU 80H
|