home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
robot-pd
/
14400.ZIP
/
14400B.DSK
/
larainc1.src
< prev
next >
Wrap
Text File
|
1998-04-30
|
12KB
|
908 lines
; INCLUDEFILE LARAINC1
; 25.11.88 : RET DARF AUCH NACH 10H FUEHREN
; 24.03.89 : FEHLERMELDUNGEN
UNTRAC:
LD A,-1
JR TR0
TRACE:
XOR A
TR0:LD (DSPFLG),A ; AUSGABEFLAG
CALL GET16 ; ANZAHL DER TRACES
JR NZ,$+5
LD HL,1 ; DEFAULT 1
LD A,H
OR L
TR1:
PUSH AF
PUSH HL
CALL TRACE1
CALL TSTESC ; ABBRUCH?
JP C,EDVECT
POP HL
POP AF
JR Z,TR1 ; WENN T(U)0
DEC HL
LD A,H
OR L
JR NZ,TR1
JP EDVECT
; BITS VON (IX+5):
; 0 IFF
; 1 JP,CALL
;
; 3 RET
; 4 JP (HL)
; 5 cc
; 6 RST
DSPFLG:DEFS 1
TRACE1:
CALL GTMNEM ; BEFEHL BERECHNEN
CALL SETBRK
CALL EXECON
LD A,(DSPFLG)
OR A
RET NZ ; UNTRACE
CALL ZR1
RET
SETBRK:
BIT 1,(IX+5)
JR NZ,XJPCLL
BIT 3,(IX+5)
JR NZ,XRET
BIT 4,(IX+5)
JR NZ,XPCHL
LD DE,(NXTPC) ; BRK
OTHBRK:LD HL,(LAGPC) ; START
SET 0,(IX)
RES 1,(IX)
BIT 5,(IX+5) ; cc
RET Z
SET 1,(IX)
LD BC,(NXTPC)
RET
XPCHL:
LD HL,(LAGPC)
LD A,(HL)
LD HL,(LAGIX)
CP #DD ; JP (IX)
JR Z,XCON
LD HL,(LAGIY)
CP #FD ; JP (IY)
JR Z,XCON
LD HL,(LAGHL) ; JP (HL)
JR XCON
XJPCLL:; JP, CALL
LD HL,(JPDEST)
JR XCON
XRET:; RET
LD HL,(LAGSP)
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
XCON:EX DE,HL
JR OTHBRK
NXTPC:DEFW 3
EXECUT:; ROUTINE AUSFUEHREN
SET 0,(IX) ; DEFAULT ARGUMENTE DA
SET 1,(IX)
CALL GET16 ; ADRESSE HOLEN
JR Z,$+5
LD (LAGPC),HL ; G BEEINFLUSST PC
LD HL,(LAGPC) ; DEFAULT (PC)
PUSH HL ; EXECUTION
CALL GET16 ; BREAKPOINT
JR NZ,$+6
RES 0,(IX) ; 1. FEHLT
PUSH HL
CALL GET16
POP DE ; DE=1.A
JR NZ,$+6
RES 1,(IX) ; 2. FEHLT
LD B,H ; BC=2.A
LD C,L
POP HL ; HL=EXE
CALL EXECON ; AUFRUFEN
CALL ZR1 ; REGISTER AUSGEBEN
JP EDVECT
BRKST1:DEFS 1
BRKST2:DEFS 1
BRK1:DEFS 2
BRK2:DEFS 2
STBRK:; BREAKPOINT EINSETZEN
LD A,L
SUB H
CP #10 ; GLEICH WENN HL=10
RET Z ; DA SONST BEI #10 RST #10
LD A,#D7 ; RST #10
JP SCHREI ; LD (HL),A
EXECON:; HL=EX DE=1.B BC=2.B
LD (BRK2),BC
PUSH HL
BIT 0,(IX)
JR Z,NO1B
EX DE,HL
CALL LESE ; LD A,(HL)
LD (BRKST1),A
CALL STBRK
LD (BRK1),HL
NO1B:
BIT 1,(IX)
JR Z,NO2B
LD HL,(BRK2)
CALL LESE ; LD A,(HL)
LD (BRKST2),A
CALL STBRK
LD (BRK2),HL
NO2B:
LD HL,(LAGSP)
POP DE ; AUFRUFADRESSE
DEC HL
LD (HL),D
DEC HL
LD (HL),E
LD (SPSTON),HL
PUSH IX
PUSH IY
PUSH DE
PUSH BC
PUSH HL
PUSH AF
LD A,I
LD H,A
LD A,R
LD L,A
PUSH HL
CALL BEFOR ; RST #10 PATCHEN
LD IX,(LAGIX)
LD IY,(LAGIY)
LD BC,(LAGBC)
LD HL,(LAGIR)
LD A,H
LD I,A
LD A,L
LD R,A
LD HL,(#11)
LD DE,GO-DISON
ADD HL,DE
LD (ADSTOR),HL ; EINSPRUNG
LD HL,(LAGAF)
PUSH HL
POP AF
LD HL,(LAGHL)
LD DE,(LAGDE)
CALL ROMAUF ; FAR CALL
LD (LAGHL),HL
PUSH AF
POP HL
LD (LAGAF),HL
LD A,I
LD H,A
LD A,R
LD L,A
LD (LAGIR),HL
LD (LAGIX),IX
LD (LAGIY),IY
LD (LAGDE),DE
LD (LAGBC),BC
LD HL,(SPSTON) ; SP NACH AUSFUEHRUNG
LD E,(HL)
INC HL
LD D,(HL) ; ADRESSE NACH RST#10 POPPEN
INC HL
DEC DE
LD (LAGPC),DE
LD (LAGSP),HL
LD DE,(DEFSP) ; TOPLEVEL STACK
OR A
EX DE,HL
SBC HL,DE
JR NC,NOTOMU ; NOCH NICHT ZUVIELE RETs
LD HL,(DEFSP)
LD (LAGSP),HL ; SP UND PC
LD HL,#F ; INITIALISIEREN
LD (LAGPC),HL
NOTOMU:
CALL AFTER ; RST #10
POP HL
LD A,H
LD I,A
LD A,L
LD R,A
POP AF
POP HL
POP BC
POP DE
POP IY
POP IX
BIT 0,(IX)
JR Z,NF1
LD A,(BRKST1)
LD HL,(BRK1)
CALL SCHREI
NF1:BIT 1,(IX)
RET Z
LD A,(BRKST2)
LD HL,(BRK2)
CALL SCHREI
RET
BEFOR:LD HL,(#11)
PUSH HL
LD DE,BUFFER
LD BC,DISONE-DISON
LDIR ; RST #10 SAVEN
POP DE
LD HL,DISON
BEFCON:LD BC,DISONE-DISON
LDIR
RET
AFTER:
LD HL,BUFFER
LD DE,(#11)
JR BEFCON
BRKSTO:DEFS 3
GETROM:; ROMKONFIGURATION HOLEN
LD A,(ROMNUM)
CALL BYTOUT
CALL BLNOUT
CALL GET16 ; NEUES BYTE HOLEN
JP Z,EDVECT ; KEIN NEUES
LD A,H
OR A
PUSH HL
LD HL,EBYTRQ ; NUR 8 BIT
JP NZ,WRONG
POP HL
LD A,L
LD (ROMNUM),A
CALL BYTOUT
JP EDVECT
REGSTR:DEFM "AF="
DEFB 0
DEFM " HL="
DEFB 0
DEFM " DE="
DEFB 0
DEFM " BC="
DEFB 0
DEFM " IX="
DEFB 0
DEFM " IY="
DEFB 0
DEFM " IR="
DEFB 0
DEFM " SP="
DEFB 0
DEFM " PC="
DEFB 0
DEFB 13,10
DEFM "(SP)="
DEFB 0
CBACK:DEFB 8,8,8,8,0
ZR:CALL LINEF ; <= CHNREG
JR Z1
ZEIREG:; ZEIGE REGISTER
LD A,(IX+4)
DEC A
JP NZ,CHNREG
Z1:CALL ZR1
JP EDIT
ZR1:LD B,10
LD HL,REGSTR
LD DE,LAGAF
REOU:
CALL TXTOUT
PUSH HL ; => TEXT
EX DE,HL
LD E,(HL)
INC HL
LD D,(HL)
INC HL
EX DE,HL
CALL ZWBYTO
POP HL
DJNZ REOU
LD HL,CBACK
CALL TXTOUT
LD HL,(LAGSP)
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
CALL ZWBYTO ; (SP) AUSGEBEN
CALL BLNOUT
CALL BLNOUT
LD A,(LAGAF)
LD B,A
RL B
LD A,"S"
CALL FLGOUT
RL B
LD A,"Z"
CALL FLGOUT
RL B
RL B
LD A,"H"
CALL FLGOUT
RL B
RL B
LD A,"P"
CALL FLGOUT
RL B
LD A,"N"
CALL FLGOUT
RL B
LD A,"C"
CALL FLGOUT
CALL GTMNEM
LD B,24
CALL BLNOUT
DJNZ $-3
LD HL,SEP ; " >> "
CALL TXTOUT
CALL AUS1
LD HL,BUFFER+4
CALL TXTOUT
CALL LINEF
LD HL,(LAGPC)
LD (PROCOU),HL
LD (DUMANF),HL ; DUMP UND DISASS STARTET AB PC
RET
FLGOUT:JR C,$+4
LD A," "
JP TXTOPU
SEP:DEFB " "," ",">",">"," ",0
GTMNEM:; MENEMONIK+BRKADR HOLEN
LD HL,(PROCOU)
PUSH HL ; PROCOU VON L
LD HL,(LAGPC)
LD (PROCOU),HL
CALL DISS1
LD HL,(PROCOU)
LD (NXTPC),HL
POP HL
LD (PROCOU),HL ; OLD PROCOU
RET
CHNREG:
LD A,2
CP (IX+4) ; MEHR ALS Z.B. "XH"
LD HL,ESYNER
JP NZ,WRONG
LD A,(DE)
AND #DF ; UPPER$
CP "A"
LD HL,LAGAF
JR Z,CBTE
CP "I"
LD HL,LAGIR
JR Z,CBTE
CP "H"
LD HL,LAGHL
JR Z,CBTE
CP "D"
LD HL,LAGDE
JR Z,CBTE
CP "B"
LD HL,LAGBC
JR Z,CBTE
CP "X"
LD HL,LAGIX
JR Z,CBTE
CP "Y"
LD HL,LAGIY
JR Z,CBTE
CP "S"
LD HL,LAGSP
JR Z,CBTE
CP "P"
LD HL,ESYNER
JP NZ,WRONG
LD HL,LAGPC
CBTE:
LD E,(HL)
INC HL
LD D,(HL) ; DOPPELREGISTER HOLEN
PUSH HL
EX DE,HL
CALL ZWBYTO ; AUSGEBEN
CALL BLNOUT ; " "
LD (IX+4),4 ; 4 ZEICHEN
CALL GETTXT ; HOLEN
CALL GET16
JP Z,ZR
EX DE,HL
POP HL
LD (HL),D
DEC HL
LD (HL),E
JP ZR ; REGISTER ZEIGEN
PUTTXT:; TEXT EINGEBEN
CALL GET16 ; ZIELADRESSE
PUSH HL
LD HL,ENOADR
JP Z,WRONG
POP HL
PULO:LD A,(DE)
OR A
JP Z,EDVECT ; 0 FERTIG
CALL SCHREI ; LD (HL),A
INC HL
INC DE
JR PULO
ZWBLN:; ZWEI BYTE +BLANK AUS
CALL ZWBYTO
JP BLNOUT
SWPBUF:PUSH HL
LD HL,BUFFER
JR SWPCON
SWAP:; (HL) UND (DE)
PUSH HL
LD HL,TXTBUF+1
SWPCON:PUSH BC
PUSH DE
PUSH AF
LD DE,#A000
LD B,#30
CALL SWLOOP
POP AF
POP DE
POP BC
POP HL
RET
SWLOOP:LD A,(HL)
LD C,A
LD A,(DE)
LD (HL),A
LD A,C
LD (DE),A
INC HL
INC DE
DJNZ SWLOOP
RET
DUMP:; SPEICHERBEREICH AUSDUMPEN
LD (IX),0
CALL GET16
JR NZ,OK3 ; ETWAS GEFUNDEN
LD HL,(DUMANF)
OK3:LD (DUMANF),HL
CALL GET16
LD (DUMEND),HL
LD (IX+3),13 ; DEFAULT: 12 ZEILEN
ZEIDUM:
BIT 3,(IX) ; ENDE ANGEGEBEN
JR NZ,N1
DEC (IX+3) ; ZEILENZAEHLER
JP Z,EDIT ; FERTIG
N1:
CALL CLRBUF ; BUFFER LOESCHEN
LD HL,BUFFER ; AM ANFANG 6 BLANKS
LD (BUFZEI),HL ; PLATZ FUER HEX
LD HL,BUFFER+55
LD (BYTZEI),HL ; PLATZ FUER ASCII
LD HL,(DUMANF)
PUSH HL
CALL VERS4 ; PC STAND
LD B,2
CALL BLOUT ; " "
POP HL
LD A,L
AND #F
JR Z,DMPBYT ; GLATTER ANFANG
LD L,A
LD E,A
ADD A,A
ADD A,L ; A=A*3
LD B,A
CALL BLOUT ; A*3 BLANKS
LD B,E
BLTOBU:CALL ATOBUF ; " " IN BUFFER
DJNZ BLTOBU
DMPBYT:
BIT 3,(IX)
JR Z,EDVEC+3 ; KEIN ENDE ANGEGEBEN
LD DE,(DUMANF)
LD HL,(DUMEND)
OR A
SBC HL,DE
PUSH AF
CALL C,ZEIOUT ; ANFANG>ENDE
POP AF
EDVEC:JP C,EDIT
CALL TSTESC ; TEST AUF ABBRUCH
JR C,EDVEC
LD HL,(DUMANF)
CALL GETBYT
LD (DUMANF),HL
PUSH AF ; BYTE
CALL VERS3 ; HEX IN BUFFER
CALL BLANK
POP AF
CALL ATOBUF ; ASCII IN BUFFER
LD A,(DUMANF) ; LOWBYTE DUMPZEIGER
AND #F ; NUR LOWNIBBLE
JR NZ,DMPBYT ; NOCH KEINE 16 BYTES FERTIG
LINFER:CALL ZEIOUT
JP ZEIDUM
ZEIOUT:
LD HL,(BYTZEI)
LD (HL),0
JP AUS0
ATOBUF:; ASCII IN BUFFER
LD HL,(BYTZEI)
CALL MAKASC ; BIT 7; STEUERZEICHEN?
LD (HL),A
INC HL
LD (BYTZEI),HL
RET
MAKASC:; FUER DUMPEN
AND #7F ; BIT 7 LOESCHEN
CP " "
RET NC
LD A,"."
RET
MOVCON:
CALL MOV1
JP EDIT
MOV1:
CALL GET16 ; ZIEL
PUSH HL
LD HL,ENODST
JP Z,WRONG
POP HL
EX DE,HL ; STACK: ANFANG,ENDE,RET
POP IY ; RET
POP HL ; ENDE
POP BC ; ANFANG
PUSH IY ; RET
PUSH BC
PUSH DE ; ZIEL
SBC HL,BC ; ENDE-ANFANG
PUSH HL
LD HL,EILEND
JP C,WRONG ; ANFANG>ENDE
POP HL
LD B,H
LD C,L
POP HL ; ZIEL
POP DE ; ANFANG
PUSH HL
SBC HL,DE ; ZIEL-ANFANG
POP HL ; ZIEL
EX DE,HL
INC BC
JP C,VLDIR
DEC BC
ADD HL,BC ; OBEN ANFANGEN
EX DE,HL
ADD HL,BC
EX DE,HL
INC BC
JP VLDDR
MOVE:SET 0,(IX) ; ZEICHEN FUER MOVE
FILL:; SPEICHERBEREICH FUELLEN
CALL GET16
PUSH HL ; ANFANG
LD HL,ENOSTA
JP Z,WRONG ; NICHTS GEFUNDEN
CALL GET16
PUSH HL
LD HL,ENOEND
JP Z,WRONG ; KEIN ENDE
BIT 0,(IX)
JR NZ,MOVCON ; MOVE
CALL GET8
BIT 3,(IX)
LD HL,EBYTRQ ; KEIN FILLBYTE
JP Z,WRONG
OR A
POP HL
POP DE
SBC HL,DE ; HL:=LAENGE
PUSH HL
LD HL,EILEND
JP C,WRONG ; ANFANG>ENDE
POP HL
LD B,H
LD C,L ; BC:=LAENGE
EX DE,HL ; HL:=ANFANG
CALL SCHREI ; LD (HL),A FILLBYTE
LD A,B
OR C
JP Z,EDIT ; NUR 1 BYTE
LD D,H
LD E,L
INC DE
CALL KLLDIR ; KL LDIR
JP EDIT
ZHLOUT:
INC DE
CALL GET16
LD A,1
CALL PRINT
LD A,L ; ?CHR$(1)+CHR$(L)
CP " "
JR NC,P2 ; KEIN STEUERZEICHEN
LD C,A
LD A,"^"
CALL PRINT
LD A,C
OR 64
P2:CALL PRINT
CALL BLNOUT
LD C,0
PUSH HL
LD DE,10000
CALL TSTDIG
LD DE,1000
CALL TSTDIG
LD DE,100
CALL TSTDIG
LD E,10
CALL TSTDIG
LD E,1
CALL TSTDIG
POP HL
CALL BLNOUT
LD BC,16*256+0 ; 16 BIT
BITOUT:XOR A
ADD HL,HL ; HOECHSTES BIT INS CY
ADC A,"0"
CP "1"
JR Z,PR1-2
BIT 0,C
JR Z,PR1+3
LD C,1 ; EINE 1 WURDE AUSGEGEBEN
PR1:CALL PRINT
DJNZ BITOUT
CALL LINEF
JP EDIT
TSTDIG:
XOR A
INC A
SBC HL,DE
JR NC,TSTDIG+1
ADD HL,DE
ADD A,"0"-1
CP "1"
JR NC,PRVEC ; >"0"
BIT 0,C ; SCHON 1 DA ?
RET Z
PRVEC:LD C,1
JP PRINT
HEXCOM:; HEXADECIMAL COMPUTATION
LD A,(IX+4)
DEC A ; NUR "H"
JP Z,HELP
LD A,(DE)
CP "."
JR Z,ZHLOUT ; ZAHL AUSGEBEN
CP ":"
JR Z,DEZHEX ; DEZZAHL ALS HEX AUSGEBEN
CALL GET16
PUSH HL
LD HL,ESYNER
JP Z,WRONG ; KEIN 1. ARGUMENT
CALL GET16
PUSH HL
LD HL,ESYNER
JP Z,WRONG ; KEIN 2. ARGUMENT
POP HL
POP DE
EX DE,HL
PUSH HL
PUSH DE
ADD HL,DE
CALL ZWBYTO ; AUSGEBEN
CALL BLNOUT
POP DE
POP HL
OR A
SBC HL,DE
DZAUS:CALL ZWBYTO ; AUSGEBEN
CALL LINEF
JP EDIT
DEZHEX:
LD B,0
LD C,(IX+4) ; EINGEGEBENE ZEICHEN
DEC C ; "H"
DEC C ; ":"
EX DE,HL
ADD HL,BC
EX DE,HL ; DE ZEIGT AUF LETZTE ZIFFER
LD HL,0 ; BIS JETZT ERGEBNIS 0
LD BC,1
CALL STELLE
LD BC,10
CALL STELLE
LD BC,100
CALL STELLE
LD BC,1000
CALL STELLE
LD BC,10000
CALL STELLE
LD A,(DE)
CP ":"
JR Z,DZAUS
CP "-"
PUSH HL
LD HL,EOVFLW ; OVERFLOW
JP NZ,WRONG ; ZUVIEL STELLEN
POP HL
MINUS:
LD A,H
OR L
JR Z,DZAUS ; -0 IST 0
PUSH HL
LD DE,32769
OR A
SBC HL,DE
PUSH HL
LD HL,EOVFLW
JP NC,WRONG ; OVERFLOW
POP HL
POP DE
OR A
LD HL,0
SBC HL,DE ; NEGATIVE ZAHL
JR DZAUS
STELLE:
LD A,(DE)
DEC DE
CP ":" ; AM ANFANG ANGELANGT
JR Z,DZAUS
CP "-"
JR Z,MINUS
SUB "0"
PUSH HL
LD HL,EILDIG
JP C,WRONG
POP HL
CP 10
PUSH HL
LD HL,EILDIG ; FALSCHE ZIFFER
JP NC,WRONG
POP HL
OR A
RET Z ; EINE STELLE MIT 0
PUSH DE
PUSH HL
LD D,A ; DEZIMALSTELLE
LD HL,0
ADDI:ADD HL,BC
DEC D
JR NZ,ADDI
EX DE,HL ; STELLENWERT NACH DE
POP HL
ADD HL,DE
PUSH HL
LD HL,EOVFLW
JP C,WRONG ; UEBERLAUF
POP HL
POP DE
RET
CLLUSR:; RUFT USERROUTINE AUF
LD A,(IX+4) ; EINGEGEBENE ZEICHEN
DEC A
JR Z,EXUSR
LD A,(DE)
AND #DF
INC DE
CP "A"
LD HL,ESYNER ; SYNTAX ERROR
JP NZ,WRONG
CALL GET16
PUSH AF
EX DE,HL
LD HL,(TOPATR)
CALL ZWBYTO
CALL BLNOUT
EX DE,HL
POP AF
JP Z,EDVECT ; KEINE NEUE ADRESSE
LD (TOPATR),HL
CALL ZWBYTO
JP EDVECT
TOPATR:DEFW 1000
EXUSR:
LD C,#FF
LD HL,(TOPATR)
; CALL FRPCHL
LD (ADSTOR),HL
CALL ROMAUF
JP EDIT
STORE:; BYTE EINGEBEN
CALL GET16 ; ADRESSE HOLEN
PUSH HL
LD HL,ENOADR
JP Z,WRONG ; KEINE DA
POP HL
DEC HL
SLOOP:
INC HL
PUSH HL ; ADRESSE
CALL ZWBYTO ; 16 BIT AUSGEBEN
CALL BLNOUT ; " "
CALL GETBYT ; BYTE AUS SPEICHER
PUSH AF
LD D,A
LD A,1
CALL TXTOPU ; ?CHR$(1)+CHR$(...
LD A,D
CALL TXTOPU
CALL BLNOUT
POP AF
CALL BYTOUT ; AUSGEBEN
CALL BLNOUT ; " "
LD (IX+4),2 ; ZWEI ZEICHEN HOLEN
CALL GETTXT
JP NC,EDVECT ; ESC
RES 4,(IX)
LD A,(DE)
CP "."
JP Z,EDVECT ; ENDE
CP "'" ; ASCII ?
JR NZ,CGET8
INC DE
LD A,(DE)
SET 3,(IX)
JR CGET8+3
CGET8:CALL GET8
PUSH AF
CALL LINEF
POP AF
POP HL ; ADRESSE
BIT 3,(IX)
JR Z,SLOOP
CALL SCHREI ; LD (HL),A
JR SLOOP
POP HL ; ADRESSEçBIT 3