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
/
lara-ram.src
< prev
next >
Wrap
Text File
|
1998-04-30
|
8KB
|
489 lines
; INCLUDEFILE LARA-RAM
; 24.03.89 YP,YG
RZIEL:EQU #BAE9
RDIST:EQU RZIEL-$
RANF:
SPSTO1:DEFS 2
FARAD1:DEFS 3
RST181:RST #18
DEFW FARADR
RAM11:DI
EXX
LD H,#C1
RAMRO1:OUT (C),H
EXX
EI
RET ; => AUFZURUFENDE ROUTINE
FARADR:EQU FARAD1+RDIST
LLDIR1:LDIR
LIES1:LD A,(DE)
RET
WRITE1:LD (HL),A
RET
REND:
SPSTO:EQU SPSTO1+RDIST
SPSTON:EQU LLDIR1+RDIST
LESE:PUSH HL ; LD A,(HL)
PUSH DE
PUSH BC
EX DE,HL
CALL LAM ; LD A,(DE)
POP BC
POP DE
POP HL
RET
LDDEA:EX DE,HL ; LD (DE),A
CALL SCHREI ; LD (HL),A
EX DE,HL
RET
RST18:EQU RST181+RDIST
LLDIR:EQU LLDIR1+RDIST
RAMROU:EQU RAMRO1+RDIST
RAM1:EQU RAM11+RDIST
LIES:EQU LIES1+RDIST
WRITEB:EQU WRITE1+RDIST
DISON:
LD (SPSTON),SP ; ABSOLUTE ADRESSEN
LD SP,(SPSTO) ; WERDEN ANGEPASST
RET
GO:LD (SPSTO),SP
LD SP,(SPSTON)
RET
DISONE:
RAMINI:
PUSH DE
PUSH HL
PUSH BC
PUSH AF
LD HL,RANF
LD DE,RZIEL
LD BC,REND-RANF
LDIR
LD HL,(#BDEE)
LD (ESCIND),HL
LD A,#C9
LD (#BDEE),A
POP AF
POP BC
POP HL
POP DE
RET
ESCIND:DEFS 2
VECAUF:
DI
EXX ; R'
LD HL,(ESCIND)
LD (#BDEE),HL ; RESET ERMOEGLICHEN
POP HL ; ADRESSE NACH CALL
LD E,(HL)
INC HL
LD D,(HL) ; ZIEL
LD HL,RAM1
PUSH HL ; RET AUF RAM1
PUSH DE ; AUFZURUFENDE ROUTINE
JR BACK1
BACK:
DI
EX AF,AF'
LD A,#C9
LD (#BDEE),A
EX AF,AF'
EXX
BACK1:LD H,#C0 ; 3
JP RAMROU
COUTD:JP #BC8C ; CAS OUT OPEN
COCHRD:JP #BC95 ; CAS OUT CHAR
COCLOD:JP #BC8F ; CAS OUT CLOSE
CIND:JP #BC77 ; CAS IN OPEN
CICHRD:JP #BC80 ; CAS IN CHAR
CICLOD:JP #BC7A ; CAS IN CLOSE
CASOUT:CALL VECAUF
DEFW #BC8C ; CAS OUT OPEN
COUDIR:CALL VECAUF
DEFW #BC98 ; CAS OUT DIRECT
COUCHR:CALL VECAUF
DEFW #BC95 ; CAS OUT CHAR
COUCLO:CALL VECAUF
DEFW #BC8F ; CAS OUT CLOSE
COUABA:CALL VECAUF
DEFW #BC92 ; CAS OUT ABANDON
CINABA:CALL VECAUF
DEFW #BC7D ; CAS IN ABANDON
CASIN:CALL VECAUF
DEFW #BC77 ; CAS IN OPEN
CASIND:CALL VECAUF
DEFW #BC83 ; CAS IN DIRECT
CINCHR:CALL VECAUF
DEFW #BC80 ; CAS IN CHAR
CASCAT:CALL VECAUF
DEFW #BC9B ; CAS CATALOG
CINCLO:CALL VECAUF
DEFW #BC7A ; CAS IN CLOSE
CURENA:CALL VECAUF
DEFW #BB7B ; TXT CUR ENABLE
CURON:CALL VECAUF
DEFW #BB81 ; TXT CUR ON
CUROFF:CALL VECAUF
DEFW #BB84 ; TXT CUR OFF
TXTINI:CALL VECAUF
DEFW #BB4E ; TXT INITIALISE
TXTOPU:CALL VECAUF ; VOR DEFW.. MUSS CALL SEIN
DEFW #BB5A ; TXT OUTPUT
RDCHAR:CALL VECAUF
DEFW #BB60 ; TXT READ CHAR
PLCECR:CALL VECAUF
DEFW #BB8A ; TXT PLACE CURSOR
SETCUR:CALL VECAUF
DEFW #BB75 ; TXT SET CURSOR
SETCOL:CALL VECAUF
DEFW #BB6F ; TXT SET COLUMN
GETCUR:CALL VECAUF
DEFW #BB78 ; TXT GET CURSOR
VALIDA:CALL VECAUF
DEFW #BB87 ; TXT VALIDATE
SCRRES:CALL VECAUF
DEFW #BC02 ; SCR RESET
SETMOD:CALL VECAUF
DEFW #BC0E ; SCR SET MODE
GETMOD:CALL VECAUF
DEFW #BC11 ; SCR GET MODE
CHRLIM:CALL VECAUF
DEFW #BC17 ; SCR CHAR LIMITS
SETBAS:CALL VECAUF
DEFW #BC08 ; SCR SET BASE
GETLOC:CALL VECAUF
DEFW #BC0B ; SCR GET LOCATION
SETLOC:CALL VECAUF
DEFW #BC05 ; SCR SET OFFSET
GETPOS:CALL VECAUF
DEFW #BC1A ; SCR CHAR POSITION
WCHAR:CALL VECAUF
DEFW #BB06 ; KM WAIT CHAR
RCHAR:CALL VECAUF
DEFW #BB09 ; KM READ CHAR
CHRRET:JP #BB0C ; KM CHAR RETURN
SETSFT:CALL VECAUF
DEFW #BB2D ; KM SET SHIFT
SETEXP:
JP #BB0F ; KM SET EXPAND
TSTKEY:
JP #BB1E ; KM TEST KEY
PRTCHR:CALL VECAUF
DEFW #BD2B ; MC PRINT CHAR
TSTPRT:CALL VECAUF
DEFW #BD2E ; MC BUSY PRINTER
WTFLY:CALL VECAUF
DEFW #BD19 ; MC WAIT FLYBACK
ROMWLK:CALL VECAUF
DEFW #BCCB ; KL ROM WALK
KLFCOM:CALL VECAUF
DEFW #BCD4 ; KL FIND COMMAND
KLLDIR:CALL VECAUF
DEFW #B91B ; KL LDIR
SCHREI:CALL VECAUF
DEFW WRITEB ; LD (HL),A
VLDDR:; LDDR
PUSH HL
LD HL,#B8ED
JR LDIR1
VLDIR:; LDIR
PUSH HL
LD HL,#B0ED
LDIR1:LD (LLDIR),HL
LD HL,LLDIR
LD (ADSTOR),HL
LD L,A
EX (SP),HL
CALL ROMAUF
EX (SP),HL
LD A,L
POP HL
RET
VCPIR:; CPIR
PUSH HL
LD HL,#B1ED
JR LDIR1
VCPI:; CPI
PUSH HL
LD HL,#A1ED
JR LDIR1
LAM:LD HL,LIES ; LD A,(DE)
LD A,(ROMNUM)
LD C,A ; ROM
FRPCHL:CALL VECAUF ; KL FAR PCHL
DEFW #1B
ROMAUF:; RST #18
PUSH AF
PUSH HL
LD HL,(ADSTOR)
LD (FARADR),HL
LD A,(ROMNUM)
LD (FARADR+2),A
POP HL
POP AF
RUNROU:CALL VECAUF
DEFW RST18
LAGAF:DEFW #FF00 ; WIE BEIM BOOTEN
LAGHL:DEFW #ABFF
LAGDE:DEFW #40
LAGBC:DEFW #B0FF
LAGIX:DEFW 0
LAGIY:DEFW 0
LAGIR:DEFW 0
LAGSP:DEFS 2
LAGPC:DEFW #F
ADSTOR:DEFS 2 ; SPEICHER FUER FARADRESSE
DIVINI:
POP DE ; RET
LD (STACK),SP ; SP VON TOPLEVEL
LD HL,-128
ADD HL,SP
PUSH DE
LD (LAGSP),HL ; STACK FUER AUFGERUFENE ROUTINEN
LD (DEFSP),HL
LD DE,#10 ; RST 10H
LD (HL),E
INC HL
LD (HL),D ; STANDART-RET
CALL #B906 ; LROM ON
PUSH AF
LD HL,(#BB22) ; ZIEL KM GET STATE
RES 7,H
RES 6,H ; HL:=0..3FFF
INC HL ; "LD HL," UEBERLESEN
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
INC HL
LD (SHIFT),HL ; HL=>KM FLAG SHIFT
DEC HL ; HL=>CAPS FLAG
LD A,(HL)
INC HL
LD L,(HL)
LD H,A
LD (SFTSTT),HL ; SHIFT/CAPS STATUS
POP AF
JP #B90C ; KL ROM RESTORE
MEMSAV:
CALL GETLOC ; SCHIRMPOS
CP #C0
LD HL,EBSLOW
JP NZ,WRONG ; SCHIRM MUSS OBEN SEIN
CALL RTOMEM ; HL=ROUTINE IN SCHIRM
LD C,#FF ; RAM
CALL FRPCHL ; AUSFUEHREN
CALL RTOMEM ; ROUTINE WIEDER EINTAUSCHEN
JP EDVECT
TOTWO:
DI
LD BC,#7FC6
OUT (C),C
LD HL,#8000
LD DE,#4000
LD BC,#4000
LDIR ; 2 -> 2*
LD BC,#7FC0
OUT (C),C
LD HL,#4000
LD DE,#8000
LD BC,#4000
LDIR ; 1 -> 2
LD BC,#7FC5
OUT (C),C
LD HL,#8000
LD DE,#4000
LD BC,#4000
LDIR ; 2 -> 1*
LD BC,#7FC6
OUT (C),C
LD HL,#4000
LD DE,#8000
LD BC,#4000
LDIR ; 2* -> 2
LD BC,#7FC4
OUT (C),C
LD HL,#0000
LD DE,#4000
LD BC,#4000
LDIR ; ; 0 -> 0*
LD BC,#7FC0
OUT (C),C
EI
RET
MEMLD:
DI
LD HL,#0008
LD DE,BUFFER
LD BC,#1B-8
LDIR ; WICHTIGSTE VECTOREN MERKEN
LD BC,#7FC2
OUT (C),C ; 1* - 4*
LD HL,BUFFER
LD DE,#0008
LD BC,#1B-8
MEMCMP:
LD A,(DE)
INC DE
CPI
JR NZ,$+5 ; UNGLEICH
JP PE,MEMCMP
LD BC,#7FC1
OUT (C),C
LD HL,ENTSVD ; NICHT GESPEICHERT
JP NZ,WRONG
CALL GETMOD ; SCREEN MODE HOLEN
PUSH AF
CALL GETLOC
PUSH HL ; SCREEN OFFSET
CP #C0
LD HL,#4000
LD BC,#4000
LD DE,#C000
CALL NZ,KLLDIR ; WENN BASE LOW, SCHIRM RETTEN
CALL GETCUR ; CURSOR HOLEN
PUSH HL
DI
LD BC,#7FC3 ; 3+3*
OUT (C),C
LD HL,#5000 ; DORTHIN KOMMT #D000
LD DE,BUFFER
LD BC,48 ; TEIL VON SCHIRM WO STACK
LDIR ; HINKOMMT MERKEN
LD BC,#7FC1 ; 3*
OUT (C),C
EI
CALL RFRMEM
LD C,#FF
CALL FRPCHL
CALL RFRMEM
DI
LD BC,#7FC3 ; 3+3*
OUT (C),C
LD HL,BUFFER
LD DE,#5000
LD BC,48 ; TEIL VON SCHIRM WO STACK
LDIR ; WAR HOLEN
LD BC,#7FC1 ; 3*
OUT (C),C
EI
POP HL
CALL SETCUR ; CURSOR SETZEN
POP HL
CALL SETLOC ; SCREEN OFFSET SETZEN
CALL GETMOD
POP HL
CP H
LD A,2
CALL NZ,SETMOD ; MODE WURDE GEWECHSELT
JP SCR3 ; SCREEN BASIS AUSGEBEN UND EDIT
TOONE:
DI
PUSH HL ; => TOONE
LD HL,2 ; PUSH HL UEBERLESEN
ADD HL,SP
LD DE,#D000
LD BC,48 ; 24 EBENEN SOLLTEN REICHEN
LDIR ; STACK MERKEN
POP DE ; => TOONE
LD HL,SPVMRK-TOONE+1
ADD HL,DE ; HL=> SP-SPEICHER+1
EX DE,HL
LD HL,0
ADD HL,SP
EX DE,HL
LD (HL),D ; SP HIGH
DEC HL
LD (HL),E
LD SP,HL
PUSH HL ; => SP-SPEICHER
LD BC,#7FC5
OUT (C),C
LD HL,#4000
LD DE,#8000
LD BC,#4000
LDIR ; 1* -> 2
LD BC,#7FC0
OUT (C),C
LD HL,#8000
LD DE,#4000
LD BC,#4000
LDIR ; 2 -> 1
LD BC,#7FC6
OUT (C),C
LD HL,#4000
LD DE,#8000
LD BC,#4000
LDIR ; 2* -> 2
LD BC,#7FC4
OUT (C),C
LD HL,#4000
LD DE,#0000
LD BC,#4000
LDIR ; 0* -> 0
POP HL ; => SP-SPEICHER
LD E,(HL)
INC HL
LD D,(HL) ; ALTER SP
PUSH DE
LD HL,#D000
LD BC,48
LDIR ; ALTEN STACK WIEDER HOLEN
POP HL ; SP
LD SP,HL
EI
RET
DEFS 8 ; STACK FUER VERSCHIEBEROUTINEN
SPVMRK:DEFS 2
NOTSCR:DEFS 1
SCRPOS:DEFS 2
RTOMEM:; SPEICHER IN RAM
LD B,MEMLD-TOTWO
LD DE,TOTWO
JR RMEMCN
RFRMEM:; SPEICHER AUS RAM
LD B,NOTSCR-TOONE
LD DE,TOONE
RMEMCN:LD HL,#C000
PUSH HL
EX DE,HL
CALL SWINOUT
POP HL
RET
SWINOUT:; HL=>LARA , DE=>MEM
EX DE,HL
CALL LESE ; LD A,(HL) AUS MEM
EX DE,HL
LD C,A
LD A,(HL)
LD (HL),C
CALL LDDEA ; LD (DE),A
INC DE
INC HL
DJNZ SWINOUT
RET
3
RST18