mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-02-27 09:09:14 +00:00
5013 lines
196 KiB
Plaintext
5013 lines
196 KiB
Plaintext
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 1
|
||
|
||
|
||
; **********************************************************************
|
||
; * *
|
||
; * ZIP80 - MSX VERSION *
|
||
; * Z-CODE INTERPRETER PROGRAM *
|
||
; * FOR ZILOG Z80 MICROPROCESSOR *
|
||
; * COPYRIGHT 1984, INFOCOM, INC. *
|
||
; * COMPANY PRIVATE -- NOT FOR DISTRIBUTION *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
;
|
||
;
|
||
; **********************************************************************
|
||
; * *
|
||
; * REVISION HISTORY *
|
||
; * *
|
||
; * 7/27/84 RML *
|
||
; * 12/19/84 LS (First MSX version) *
|
||
; * 2/5/85 LS (Reset random flag) *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
;
|
||
; *************************************
|
||
; * EQUATES *
|
||
; *************************************
|
||
;
|
||
;--------------------------------------
|
||
; SOME COMMON DEFINITIONS
|
||
;--------------------------------------
|
||
;
|
||
0000 FALSE EQU 00H ;STANDARD FALSE VALUE
|
||
00FF TRUE EQU 0FFH ;STANDARD TRUE VALUE
|
||
;
|
||
;--------------------------------------
|
||
; CPM EQUATES
|
||
;--------------------------------------
|
||
;
|
||
0000 WARM EQU 0000H ;WARM START IN BIOS
|
||
0003 IOBYTE EQU 0003H ;I/O DEVICE BLOCK
|
||
0004 CDISK EQU 0004H ;CURRENT DISK DRIVE
|
||
0005 BDOS EQU 0005H ;CPM FUNCTION ENTRY POINT
|
||
0006 LSTADR EQU 0006H ;LAST ADDRESS
|
||
005C CPMFCB EQU 005CH ;DEFAULT FILE CONTROL BLOCK
|
||
0080 CPMBUF EQU 0080H ;DEFAULT FILE TRANSFER BUFFER
|
||
0100 TPA EQU 0100H ;TRANSIENT PROGRAM AREA
|
||
;
|
||
; FILE CONTROL BLOCK OFFSETS
|
||
;
|
||
005C CPMDRV EQU CPMFCB+0 ;DRIVE
|
||
005D CPMFNB EQU CPMFCB+1 ;NAME STORAGE
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 2
|
||
|
||
|
||
0065 CPMFEX EQU CPMFCB+9 ;EXTENTION
|
||
007C CPMCR EQU CPMFCB+32 ;CURRENT RECORD
|
||
007D CPMREC EQU CPMFCB+33 ;RECORD NUMBER FOR RANDOM ACCESS
|
||
;
|
||
; CPM FUNCTION EQUATES
|
||
;
|
||
0000 CRESET EQU 0 ;SYSTEM RESET
|
||
0001 CCI EQU 1 ;CHARACTER INPUT
|
||
0002 CCO EQU 2 ;CHARACTER OUTPUT
|
||
0005 CLO EQU 5 ;LIST OUTPUT
|
||
0006 CDIO EQU 6 ;DIRECT I/O
|
||
0009 CPSTNG EQU 9 ;PRINT STRING
|
||
000A CRCBUF EQU 10 ;READ CONSOLE BUFFER
|
||
000B CGCONS EQU 11 ;GET CONSOLE STATUS
|
||
000D CPMRDS EQU 13 ;RESET DISK SYSTEM
|
||
000E CPMSEL EQU 14 ;SELECT DISK
|
||
000F OPEN EQU 15 ;ACTIVATES EXISTING FILE FOR R/W OPERATIONS
|
||
0010 CLOSE EQU 16 ;INACTIVATES OPEN FILE AND RECORDS NEW FCB IN DIRECTORY
|
||
0013 DELETE EQU 19 ;REMOVE EXISTING FILE FROM THE DIRECTORY
|
||
0019 RETCUR EQU 25 ;RETURN CURRENT DEFAULT DISK
|
||
;
|
||
;SEQUENTIAL OPERATIONS
|
||
0014 READS EQU 20 ;READ THE NEXT 128-BYTE RECORD FROM AN OPEN FILE
|
||
0015 WRITES EQU 21 ;WRITE A SEQUENTIAL 128-BYTE RECORD ONTO AN OPEN FILE
|
||
;
|
||
0016 MAKEF EQU 22 ;CREATE AND OPEN A NEW FILE
|
||
0019 CPMRCD EQU 25 ;RETURN CURRENT DISK
|
||
;
|
||
;RANDOM OPERATIONS
|
||
0021 READR EQU 33 ;READ A SPECIFIED 128-BYTE RECORD FROM AN OPEN FILE
|
||
0022 WRITER EQU 34 ;WRITE A 128-BYTE RECORD TO A SPECIFIED RECORD NUMBER
|
||
; IN AN OPEN FILE
|
||
;
|
||
;MISC. EQUATES
|
||
0085 CPLMAX EQU 133 ;MAXIMUM CHARACTERS PER LINE
|
||
;
|
||
;--------------------------------------
|
||
; APPLICATION EQUATES
|
||
;--------------------------------------
|
||
;
|
||
0040 MAXPGS EQU 64 ;MUST BE 64 FOR TRSN VERSIONS
|
||
0010 ROOMG EQU 16 ;ROOM # (USED TO DISPLAY SHORT DESCRIPTION)
|
||
0011 SCOREG EQU 17 ;SCORE
|
||
0012 MOVESG EQU 18 ;NUMBER OF MOVES
|
||
00E0 ZSTAKL EQU 224 ;LENGTH OF THE ZSTACK IN WORDS
|
||
;
|
||
;ZCODE HEADER OFFSETS INIT VALUES
|
||
0000 ZVERS EQU 0 ;VERSION BYTE
|
||
0001 ZSWAP EQU 1 ;BIT FLAGS - SEE BELOW
|
||
0002 ZID EQU 2 ;GAME ID WORD
|
||
0004 ZENDLD EQU 4 ;START OF NON-PRELOADED ZCODE
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 3
|
||
|
||
|
||
0006 ZSTART EQU 6 ;ZCODE EXECUTION ADDRESS
|
||
0008 ZVOCAB EQU 8 ;START OF VOCABULARY TABLE
|
||
000A ZOBJEC EQU 10 ;START OF OBJECT TABLE
|
||
000C ZGLOBA EQU 12 ;START OF GLOBAL VARIABLE TABLE
|
||
000E ZPURBT EQU 14 ;START OF "PURE" ZCODE
|
||
0010 ZSCRIP EQU 16 ;WORD FLAG FOR CONTROLLING SCRIPT FEATURE
|
||
0012 ZSERNM EQU 18 ;18 THROUGH 23 ARE ASCII SERIAL NUMBER, UNIQUE TO EACH COPY
|
||
0018 ZFWORD EQU 24 ;TABLE OF COMMON WORDS
|
||
001A ZCKLEN EQU 26 ;LENGTH TO USE FOR CHECKSUM
|
||
001C ZCKSUM EQU 28 ;SUM OF ALL WORDS AFTER WORD 64
|
||
;
|
||
;BIT FLAGS IN ZSWAP
|
||
0001 ZSWAPF EQU 1 ;NOT USED
|
||
0002 ZTIMEF EQU 2 ;IF SET, DISPLAY TIME IN STATUS LINE
|
||
0004 ZSPLIT EQU 4 ;SET BY MAKDAT TO INDICATE SPLIT FILE
|
||
0008 ZTANDY EQU 8 ;SET BY INTERPRETER TO DESIGNATE TANDY MACHINE
|
||
0010 ZSTATB EQU 10H ;SET BY CPM CONSOLE PROGRAM, 1 IMPLIES NO STATUS LINE
|
||
;END OF COMMON EQUATES
|
||
;
|
||
0190 LPDL EQU 400 ;200 LEVELS OF PUSH AND POP
|
||
;
|
||
; *************************************
|
||
; * *
|
||
; * PROGRAM START *
|
||
; * *
|
||
; *************************************
|
||
;
|
||
0100 ORG 100H ;START OF THE TPA
|
||
0100 START:
|
||
0100 C30002 JP CPMSTR ;JUMP AROUND CONFIGURATION DATA
|
||
;
|
||
; *************************************
|
||
; * CONFIGURATION DATA *
|
||
; *************************************
|
||
;
|
||
0103 4F CPMCPL: DB 79 ;CHARACTERS PER LINE
|
||
0104 17 CPMLPP: DB 23 ;LINES PER PAGE EXCLUDING STATUS LINE
|
||
0105 53555350 CPMFN: DB 'SUSPECT ' ;FILE PREFIX NAME (GAME DEPENDENT)
|
||
; PADDED AT THE END WITH BLANKS (' ') SO AS
|
||
; TO TOTAL 8 CHARACTERS
|
||
;
|
||
010D 01 CPMCLF: DB 1 ;1 FOR LF AFTER CR ON CONSOLE
|
||
010E 00 CPMLLF: DB 0 ;1 FOR LF AFTER CR ON LIST
|
||
010F 80 CPMINV: DB 80H ;NUMBER ADDED TO CHARACTERS FOR INVERSE VIDEO
|
||
|
||
;THE FOLLOWING STRINGS HAVE A COUNT FIELD FOLLOWED BY UP TO 32 CHARACTERS
|
||
0110 ITRMST:
|
||
0110 06 DB 6 ;INIT TERMINAL, CLEAR SCREEN, LOWER LEFT,SCROLL MODE
|
||
0111 1E1A1B3D DB 1EH,1AH,1BH,'=',55,32
|
||
0117 DS 33-($-ITRMST)
|
||
0131 00 RTRMST: DB 0 ;RESET TERMINAL
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 4
|
||
|
||
|
||
0132 DS 33-($-RTRMST)
|
||
0152 04 BSTLIN: DB 4 ;BEGIN STATUS LINE STRING
|
||
0153 1B3D2020 DB 1BH,'=',32,32
|
||
0157 DS 33-($-BSTLIN)
|
||
0173 04 ESTLIN: DB 4 ;END STATUS LINE STRING
|
||
0174 1B3D3720 DB 1BH,'=',55,32
|
||
0178 DS 33-($-ESTLIN)
|
||
0194 00 PSTUPS: DB 0 ;PRINTER SETUP STRING
|
||
0195 DS 33-($-PSTUPS)
|
||
01B5 00 TWODSK: DB 0 ;SET TO 1 IF TWO DISKS ARE AVAILABLE
|
||
;
|
||
01B6 DS 200H-$ ;TO FIX THE ENTRY POINT REGUARDLESS OF
|
||
; VARIABLE LENGTH CONFIGURATION DATA
|
||
;
|
||
; *************************************
|
||
; * CPM START *
|
||
; *************************************
|
||
;
|
||
0200 CPMSTR: ;LOCATION 200H
|
||
0200 31E90D LD SP,PDL+LPDL ;INIT MACHINE STACK
|
||
0203 C38810 JP BODY ;JUMP AROUND SUBROUTINE SECTION
|
||
;
|
||
; *************************************
|
||
; * SUBROUTINES *
|
||
; *************************************
|
||
;
|
||
0206 C35707 ZER: JP RESTAR
|
||
;
|
||
0209 2A0600 MEMTOP: LD HL,(LSTADR) ;HL <= BDOS ENTRY VECTOR
|
||
020C 7D LD A,L ;
|
||
020D FEFF CP 0FFH ;
|
||
; JP Z,MEMTP1 ;PREVIOUSLY COMMENTED OUT LINE (SCOTT)
|
||
020F 2EFF LD L,0FFH ;SUBTRACT 1 BYTE
|
||
0211 25 DEC H ;
|
||
0212 3ABC21 MEMTP1: LD A,(ZCODEP+1) ;GET MSB OF LOW MEM STARTING POINTER
|
||
0215 AC XOR H ;
|
||
0216 E601 AND 1 ;
|
||
0218 C0 RET NZ ;
|
||
0219 25 DEC H ;WASTE 256 MORE IF NECESSARY
|
||
021A C9 RET
|
||
;
|
||
;OPEN FILE
|
||
021B 32570C OPNDK1: LD (FILTYP),A ;SAVE FILETYPE
|
||
021E 215C00 LD HL,CPMFCB ;XFER DRIVE NUMBER AND FILE NAME TO FCB
|
||
0221 060C LD B,12
|
||
0223 CD4B03 CALL MOVIT
|
||
0226 AF XOR A
|
||
0227 327C00 LD (CPMCR),A ;SET CURRENT RECORD=0 (SEQUENTIAL FILE)
|
||
022A 210000 LD HL,0
|
||
022D 226800 LD (CPMFCB+12),HL ;SET EXTENT "EX" AND S1=0
|
||
0230 226A00 LD (CPMFCB+14),HL ;SET S2 AND RECORD COUNT FOR EXTENT "EX"=0
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 5
|
||
|
||
|
||
0233 115C00 LD DE,CPMFCB ;^FCB
|
||
0236 AF XOR A
|
||
0237 325C00 LD (CPMFCB),A ;SELECT DEFAULT DRIVE
|
||
023A 0E0F LD C,OPEN ;SELECT OPEN FUNCTION
|
||
023C CD0500 CALL BDOS ;DO IT
|
||
023F 3C INC A ;INCREMENT DIRECTORY CODE TO TEST FOR FILE NOT FOUND
|
||
; Z FLAG SET IF FILE NOT FOUND
|
||
0240 C0 RET NZ ;IF FILE EXISTS THEN RETURN WITH Z FLAG RESET A=0
|
||
; ELSE
|
||
;TEST FOR TWO DISKS
|
||
0241 3AB501 LD A,(TWODSK) ;MULTIPLE DISKS?
|
||
0244 B7 OR A
|
||
0245 C8 RET Z ;NO ONLY 1, ZFLAG SET AND RETURN
|
||
;
|
||
;TWO DISKS
|
||
0246 3E01 LD A,1 ;AUTO DISK SELECT DRIVE A
|
||
0248 325C00 LD (CPMFCB),A ;SET UP THE PARAMETERS
|
||
024B AF XOR A
|
||
024C 327C00 LD (CPMCR),A
|
||
024F 210000 LD HL,0
|
||
0252 226800 LD (CPMFCB+12),HL
|
||
0255 226A00 LD (CPMFCB+14),HL
|
||
0258 115C00 LD DE,CPMFCB
|
||
025B 0E0F LD C,OPEN ;TRY DRIVE 1
|
||
025D CD0500 CALL BDOS
|
||
0260 3C INC A
|
||
0261 C0 RET NZ ;RETURN IF FOUND WITH ZFLAG RESET
|
||
0262 3E02 LD A,2 ; ELSE AUTO DISK SELECT DRIVE B
|
||
0264 325C00 LD (CPMFCB),A ;SET UP THE PARAMETERS
|
||
0267 AF XOR A
|
||
0268 327C00 LD (CPMCR),A
|
||
026B 210000 LD HL,0
|
||
026E 226800 LD (CPMFCB+12),HL
|
||
0271 226A00 LD (CPMFCB+14),HL
|
||
0274 115C00 LD DE,CPMFCB
|
||
0277 0E0F LD C,OPEN ;TRY DRIVE 2
|
||
0279 CD0500 CALL BDOS
|
||
027C 3C INC A
|
||
027D C9 RET ;IF NOT FOUND, THEN Z WILL BE SET
|
||
|
||
|
||
027E 7E PCSTR: LD A,(HL) ;PRINT STRING, GET COUNT
|
||
027F 23 PCSTRL: INC HL ;POINT TO NEXT CHARACTER
|
||
0280 B7 OR A
|
||
0281 C8 RET Z ;DONE
|
||
0282 F5 PUSH AF
|
||
0283 C5 PUSH BC
|
||
0284 D5 PUSH DE
|
||
0285 E5 PUSH HL
|
||
0286 5E LD E,(HL)
|
||
0287 0E06 LD C,CDIO
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 6
|
||
|
||
|
||
0289 CD0500 CALL BDOS
|
||
028C E1 POP HL
|
||
028D D1 POP DE
|
||
028E C1 POP BC
|
||
028F F1 POP AF
|
||
0290 3D DEC A
|
||
0291 C37F02 JP PCSTRL
|
||
|
||
0294 7E PCPST: LD A,(HL) ;PRINT PRINTER SETUP STRING, GET COUNT
|
||
0295 23 PCPSTL: INC HL ;POINT TO NEXT CHARACTER
|
||
0296 B7 OR A
|
||
0297 C8 RET Z ;DONE
|
||
0298 F5 PUSH AF
|
||
0299 C5 PUSH BC
|
||
029A D5 PUSH DE
|
||
029B E5 PUSH HL
|
||
029C 5E LD E,(HL)
|
||
029D 0E05 LD C,CLO
|
||
029F CD0500 CALL BDOS
|
||
02A2 E1 POP HL
|
||
02A3 D1 POP DE
|
||
02A4 C1 POP BC
|
||
02A5 F1 POP AF
|
||
02A6 3D DEC A
|
||
02A7 C39502 JP PCPSTL
|
||
|
||
02AA 21C802 SETFIL: LD HL,FNDAT+1 ;APPEND TO THE FILE EXTENSION NAMES
|
||
02AD CDBF02 CALL SETFL1 ;THE GAME NAME SUFFIX
|
||
02B0 21E002 LD HL,FNPRE+1
|
||
02B3 CDBF02 CALL SETFL1
|
||
02B6 21D402 LD HL,FNPUR+1
|
||
02B9 CDBF02 CALL SETFL1
|
||
02BC 21EC02 LD HL,SRDFNM+1
|
||
02BF 110501 SETFL1: LD DE,CPMFN
|
||
02C2 0608 LD B,8
|
||
02C4 C34B03 JP MOVIT
|
||
|
||
02C7 002E2E2E FNDAT: DB 0,'........DAT'
|
||
02D3 002E2E2E FNPUR: DB 0,'........PUR'
|
||
02DF 002E2E2E FNPRE: DB 0,'........PRE'
|
||
02EB 002E2E2E SRDFNM: DB 0,'........SAV'
|
||
|
||
|
||
02F7 22CD0B GETDSK: LD (DBUFP),HL
|
||
02FA CD450B CALL LFILS ;OPEN ZORK/DAT FILE IF NOTHING OPEN
|
||
02FD 6F LD L,A
|
||
02FE 3A570C LD A,(FILTYP)
|
||
0301 FE03 CP 3 ;DATA TYPE OF FILE?
|
||
0303 7D LD A,L
|
||
0304 CA1803 JP Z,GETDK2
|
||
0307 219B21 LD HL,ZMEMT
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 7
|
||
|
||
|
||
030A BE CP (HL)
|
||
030B DA1503 JP C,GETPRE ;MAKE SURE ZORK/PRE IS OPEN
|
||
030E 96 SUB (HL) ;REAL OFFSET
|
||
030F CD750B CALL LFILD ;MAKE SURE ZORK/DAT IS OPEN
|
||
0312 C31803 JP GETDK2
|
||
|
||
0315 CD950B GETPRE: CALL LFILP ;GET ZORK/PRE
|
||
0318 6F GETDK2: LD L,A
|
||
0319 2600 LD H,0
|
||
031B 29 ADD HL,HL
|
||
031C 29 ADD HL,HL ;*4 FOR 128 BYTE BLOCKS
|
||
031D CD2603 CALL GTDSK1
|
||
0320 CD2603 CALL GTDSK1
|
||
0323 CD2603 CALL GTDSK1
|
||
0326 E5 GTDSK1: PUSH HL
|
||
0327 227D00 LD (CPMREC),HL
|
||
032A AF XOR A
|
||
032B 327F00 LD (CPMREC+2),A
|
||
032E 115C00 LD DE,CPMFCB
|
||
0331 0E21 LD C,READR ;READ RANDOM RECORD
|
||
0333 CD0500 CALL BDOS
|
||
0336 B7 OR A
|
||
0337 C40602 CALL NZ,ZER
|
||
033A 118000 LD DE,CPMBUF
|
||
033D 2ACD0B LD HL,(DBUFP)
|
||
0340 0680 LD B,128
|
||
0342 CD4B03 CALL MOVIT
|
||
0345 22CD0B LD (DBUFP),HL
|
||
0348 E1 POP HL
|
||
0349 23 INC HL ;INCREMENT FOR NEXT TIME
|
||
034A C9 RET
|
||
|
||
034B 1A MOVIT: LD A,(DE) ;TRANSFER (D) TO (H) COUNT IN B
|
||
034C 77 LD (HL),A
|
||
034D 23 INC HL
|
||
034E 13 INC DE
|
||
034F 05 DEC B
|
||
0350 C24B03 JP NZ,MOVIT
|
||
0353 C9 RET
|
||
|
||
0354 3A0401 READBF: LD A,(CPMLPP)
|
||
0357 3D DEC A
|
||
0358 32580C LD (MORCNT),A
|
||
035B CDF704 CALL FLSLIN
|
||
035E 3E01 LD A,1
|
||
0360 329921 LD (NOLPT),A ;TURN OFF LPT DURING READ
|
||
0363 164D LD D,77 ;D CONTAINS MAX CHARS CAN READ
|
||
0365 1E00 LD E,0 ;E CONTAINS HOW MANY HAVE BEEN READ
|
||
0367 2A9D21 LD HL,(ARG1) ;READ A BUFFER
|
||
036A 23 INC HL
|
||
036B CD3804 READB1: CALL CIN
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 8
|
||
|
||
|
||
036E FE08 CP 08H
|
||
0370 CAA303 JP Z,RDBFRO
|
||
0373 FE7F CP 7FH
|
||
0375 CAA303 JP Z,RDBFRO
|
||
0378 FE0D CP 0DH
|
||
037A CAC003 JP Z,RDBFCR
|
||
037D FE12 CP 18
|
||
037F CAFE03 JP Z,RDBFRT
|
||
0382 FE20 CP 20H
|
||
0384 DA6B03 JP C,READB1
|
||
0387 4F LD C,A
|
||
0388 CDB604 CALL COUT
|
||
038B 79 LD A,C
|
||
038C FE41 CP 'A'
|
||
038E DA9803 JP C,READB2
|
||
0391 FE5B CP 'Z'+1
|
||
0393 D29803 JP NC,READB2
|
||
0396 C620 ADD A,'a'-'A' ;CONVERT TO LOWER CASE
|
||
0398 77 READB2: LD (HL),A
|
||
0399 23 INC HL
|
||
039A 1C INC E
|
||
039B 7A LD A,D
|
||
039C BB CP E
|
||
039D CA1A04 JP Z,RDBFFL
|
||
03A0 C36B03 JP READB1
|
||
|
||
03A3 7B RDBFRO: LD A,E ;CHECK IF 1ST CHAR
|
||
03A4 FE00 CP 0 ;IF SO DON'T DELETE
|
||
03A6 CA6B03 JP Z,READB1 ;GO GET ANOTHER CHAR
|
||
03A9 1D DEC E
|
||
03AA 2B DEC HL
|
||
03AB CDB103 CALL COUTBS
|
||
03AE C36B03 JP READB1
|
||
|
||
03B1 0E08 COUTBS: LD C,08H
|
||
03B3 CDB604 CALL COUT
|
||
03B6 0E20 LD C,20H
|
||
03B8 CDB604 CALL COUT
|
||
03BB 0E08 LD C,08H ;DEVINE RUBOUT
|
||
03BD C3B604 JP COUT
|
||
|
||
03C0 E5 RDBFCR: PUSH HL
|
||
03C1 D5 PUSH DE
|
||
03C2 AF XOR A
|
||
03C3 329921 LD (NOLPT),A
|
||
03C6 2ABB21 LD HL,(ZCODEP)
|
||
03C9 111100 LD DE,ZSCRIP+1
|
||
03CC 19 ADD HL,DE
|
||
03CD 7E LD A,(HL)
|
||
03CE E601 AND 1
|
||
03D0 CAEF03 JP Z,RDBFC2 ;NO LPT
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 9
|
||
|
||
|
||
03D3 D1 POP DE
|
||
03D4 D5 PUSH DE
|
||
03D5 7B LD A,E
|
||
03D6 B7 OR A
|
||
03D7 CAEF03 JP Z,RDBFC2 ;NOTHING TYPED
|
||
03DA 2A9D21 LD HL,(ARG1)
|
||
03DD 23 INC HL
|
||
03DE 7E RDBFC3: LD A,(HL)
|
||
03DF FE61 CP 'a'
|
||
03E1 DAE603 JP C,RDBFC4 ;NOT LOWER CASE
|
||
03E4 D620 SUB 'a'-'A'
|
||
03E6 4F RDBFC4: LD C,A
|
||
03E7 23 INC HL
|
||
03E8 CD8605 CALL LPTO
|
||
03EB 1D DEC E
|
||
03EC C2DE03 JP NZ,RDBFC3
|
||
03EF D1 RDBFC2: POP DE
|
||
03F0 E1 POP HL
|
||
03F1 7A LD A,D
|
||
03F2 BB CP E
|
||
03F3 CAF903 JP Z,RDBFC1
|
||
03F6 1C INC E
|
||
03F7 360D LD (HL),0DH
|
||
03F9 CD7304 RDBFC1: CALL PCRLFD
|
||
03FC 7B LD A,E
|
||
03FD C9 RET
|
||
|
||
03FE D5 RDBFRT: PUSH DE
|
||
03FF E5 PUSH HL
|
||
0400 2A9D21 LD HL,(ARG1)
|
||
0403 23 INC HL
|
||
0404 CD7304 CALL PCRLFD
|
||
0407 7B RDBFR1: LD A,E
|
||
0408 B7 OR A
|
||
0409 CA1504 JP Z,RDBFR2
|
||
040C 4E LD C,(HL)
|
||
040D CDB604 CALL COUT
|
||
0410 1D DEC E
|
||
0411 23 INC HL
|
||
0412 C30704 JP RDBFR1
|
||
|
||
0415 E1 RDBFR2: POP HL
|
||
0416 D1 POP DE
|
||
0417 C36B03 JP READB1
|
||
|
||
041A CD3804 RDBFFL: CALL CIN
|
||
041D FE0D CP 0DH ;ACCEPT <RET>
|
||
041F CAC003 JP Z,RDBFCR
|
||
0422 FE08 CP 08
|
||
0424 CAA303 JP Z,RDBFRO
|
||
0427 FE7F CP 7FH
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 10
|
||
|
||
|
||
0429 CAA303 JP Z,RDBFRO
|
||
042C D5 PUSH DE
|
||
042D 1E07 LD E,7 ;OTHERWISE
|
||
042F 0E06 LD C,CDIO ;RING BELL
|
||
0431 CD0500 CALL BDOS
|
||
0434 D1 POP DE
|
||
0435 C31A04 JP RDBFFL ;AND LOOP TIL GET WHAT WE WANT
|
||
|
||
0438 C5 CIN: PUSH BC
|
||
0439 D5 PUSH DE
|
||
043A E5 PUSH HL
|
||
043B 1EFF CIN1: LD E,0FFH
|
||
043D 0E06 LD C,CDIO ;READ DIRECT
|
||
043F CD0500 CALL BDOS
|
||
0442 B7 OR A
|
||
0443 CA5104 JP Z,CIN2 ;NO CHARACTER YET
|
||
0446 21C80B LD HL,RDFLG
|
||
0449 36FF LD (HL),0FFH ;NOT FIRST READ ANY MORE
|
||
044B E1 POP HL
|
||
044C D1 POP DE
|
||
044D C1 POP BC
|
||
044E E67F AND 7FH
|
||
0450 C9 RET
|
||
|
||
0451 3AC80B CIN2: LD A,(RDFLG)
|
||
0454 B7 OR A
|
||
0455 C23B04 JP NZ,CIN1 ;NOT FIRST READ
|
||
0458 CDD01B CALL RND
|
||
045B C33B04 JP CIN1
|
||
|
||
045E 21C70B COUTD: LD HL,COUTDC ;INCREASE COUNT
|
||
0461 34 INC (HL)
|
||
0462 3A0F01 LD A,(CPMINV) ;INVERSE VIDEO ADDER
|
||
0465 21C60B LD HL,STAFLG
|
||
0468 A6 AND (HL) ;ADD ONLY IF IN STATUS MODE
|
||
0469 81 ADD A,C
|
||
046A 5F LD E,A
|
||
046B 0E06 LD C,CDIO
|
||
046D CD0500 CALL BDOS
|
||
0470 C39704 JP POPRET
|
||
|
||
0473 C5 PCRLFD: PUSH BC
|
||
0474 D5 PUSH DE
|
||
0475 E5 PUSH HL
|
||
0476 1E0D LD E,0DH
|
||
0478 0E06 LD C,CDIO
|
||
047A CD0500 CALL BDOS
|
||
047D 3A0D01 LD A,(CPMCLF)
|
||
0480 B7 OR A
|
||
0481 CA8B04 JP Z,PCRLD1 ;NO LINE FEED
|
||
0484 1E0A LD E,0AH
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 11
|
||
|
||
|
||
0486 0E06 LD C,CDIO
|
||
0488 CD0500 CALL BDOS
|
||
048B 0E0D PCRLD1: LD C,0DH
|
||
048D CD9B04 CALL LPCHK
|
||
0490 21580C LD HL,MORCNT
|
||
0493 35 DEC (HL)
|
||
0494 CC0107 CALL Z,MORE
|
||
0497 E1 POPRET: POP HL
|
||
0498 D1 POP DE
|
||
0499 C1 POP BC
|
||
049A C9 RET
|
||
|
||
049B C5 LPCHK: PUSH BC
|
||
049C D5 PUSH DE
|
||
049D E5 PUSH HL
|
||
049E 2ABB21 LD HL,(ZCODEP)
|
||
04A1 111100 LD DE,ZSCRIP+1
|
||
04A4 19 ADD HL,DE
|
||
04A5 7E LD A,(HL)
|
||
04A6 E601 AND 1
|
||
04A8 C48605 CALL NZ,LPTO
|
||
04AB C39704 JP POPRET
|
||
|
||
04AE CD7405 COUTCR: CALL LINOCR
|
||
04B1 C3F304 JP CORET
|
||
|
||
04B4 0E0D PCRLF: LD C,0DH
|
||
04B6 C5 COUT: PUSH BC
|
||
04B7 D5 PUSH DE
|
||
04B8 E5 PUSH HL
|
||
04B9 79 LD A,C
|
||
04BA FE08 CP 8
|
||
04BC CAD304 JP Z,COUT1
|
||
04BF FE1B CP 1BH
|
||
04C1 CA8505 JP Z,CLEARS
|
||
04C4 FE0C CP 12
|
||
04C6 CA8505 JP Z,CLEARS
|
||
04C9 FE0D CP 0DH
|
||
04CB CAAE04 JP Z,COUTCR
|
||
04CE FE20 COUT2: CP 20H
|
||
04D0 DAF304 JP C,CORET ;NON PRINTING
|
||
04D3 3A9921 COUT1: LD A,(NOLPT)
|
||
04D6 B7 OR A
|
||
04D7 C25E04 JP NZ,COUTD
|
||
04DA 3ACF0B LD A,(NCHARS)
|
||
04DD 210301 LD HL,CPMCPL
|
||
04E0 BE CP (HL)
|
||
04E1 D47405 CALL NC,LINOCR ;OUTPUT LINE IF FULL
|
||
04E4 3ACF0B LD A,(NCHARS)
|
||
04E7 3C INC A
|
||
04E8 32CF0B LD (NCHARS),A
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 12
|
||
|
||
|
||
04EB 2A550C LD HL,(CHRPNT)
|
||
04EE 71 LD (HL),C
|
||
04EF 23 INC HL
|
||
04F0 22550C LD (CHRPNT),HL
|
||
04F3 E1 CORET: POP HL
|
||
04F4 D1 POP DE
|
||
04F5 C1 POP BC
|
||
04F6 C9 RET
|
||
|
||
04F7 C5 FLSLIN: PUSH BC
|
||
04F8 3ACF0B LD A,(NCHARS)
|
||
04FB B7 OR A
|
||
04FC CA7205 JP Z,LINOTR ;NO CHARS
|
||
04FF C32105 JP LINFUL ;PRINT ALL
|
||
|
||
0502 C5 LINOUT: PUSH BC
|
||
0503 3ACF0B LD A,(NCHARS)
|
||
0506 B7 OR A
|
||
0507 CA7205 JP Z,LINOTR ;NO CHARACTERS
|
||
050A 3D DEC A
|
||
050B 47 LD B,A
|
||
050C 79 LD A,C
|
||
050D FE0D CP 0DH
|
||
050F CA2105 JP Z,LINFUL
|
||
0512 2A550C LD HL,(CHRPNT) ;FIND LAST SPACE
|
||
0515 2B DEC HL
|
||
0516 7E LINOT1: LD A,(HL)
|
||
0517 FE20 CP 20H
|
||
0519 CA2805 JP Z,LINOT2 ;FOUND SPACE
|
||
051C 2B DEC HL
|
||
051D 05 DEC B
|
||
051E F21605 JP P,LINOT1
|
||
0521 2A550C LINFUL: LD HL,(CHRPNT) ;PRINT WHOLE LINE
|
||
0524 3ACF0B LD A,(NCHARS)
|
||
0527 47 LD B,A
|
||
0528 C5 LINOT2: PUSH BC
|
||
0529 E5 PUSH HL
|
||
052A 21D00B LD HL,CHARS
|
||
052D 78 LD A,B
|
||
052E B7 OR A
|
||
052F CA4905 JP Z,LINOT6
|
||
0532 C5 LINOT3: PUSH BC
|
||
0533 D5 PUSH DE
|
||
0534 E5 PUSH HL
|
||
0535 5E LD E,(HL)
|
||
0536 0E06 LD C,CDIO
|
||
0538 CD0500 CALL BDOS
|
||
053B E1 POP HL
|
||
053C E5 PUSH HL
|
||
053D 4E LD C,(HL)
|
||
053E CD9B04 CALL LPCHK
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 13
|
||
|
||
|
||
0541 E1 POP HL
|
||
0542 D1 POP DE
|
||
0543 23 INC HL
|
||
0544 C1 POP BC
|
||
0545 05 DEC B
|
||
0546 C23205 JP NZ,LINOT3
|
||
0549 E1 LINOT6: POP HL
|
||
054A 23 INC HL
|
||
054B C1 POP BC
|
||
054C 3ACF0B LD A,(NCHARS)
|
||
054F 90 SUB B
|
||
0550 3D DEC A
|
||
0551 F25505 JP P,LINOT7
|
||
0554 AF XOR A
|
||
;
|
||
0555 32CF0B LINOT7: LD (NCHARS),A ;CHARACTERS NOT YET PRINTED
|
||
0558 CA6605 JP Z,LINOT5
|
||
055B 11D00B LD DE,CHARS
|
||
055E 7E LINOT4: LD A,(HL)
|
||
055F 12 LD (DE),A
|
||
0560 23 INC HL
|
||
0561 13 INC DE
|
||
0562 05 DEC B
|
||
0563 C25E05 JP NZ,LINOT4
|
||
0566 21D00B LINOT5: LD HL,CHARS
|
||
0569 3ACF0B LD A,(NCHARS)
|
||
056C CDEA1E CALL HLOFF
|
||
056F 22550C LD (CHRPNT),HL
|
||
0572 C1 LINOTR: POP BC
|
||
0573 C9 RET
|
||
|
||
0574 CD0205 LINOCR: CALL LINOUT
|
||
0577 C37304 JP PCRLFD
|
||
|
||
057A 2ABB21 TMCHK: LD HL,(ZCODEP) ;RETURNS NON ZERO IF IN TIME DISPLAY MODE
|
||
057D 110100 LD DE,ZSWAP
|
||
0580 19 ADD HL,DE
|
||
0581 7E LD A,(HL)
|
||
0582 E602 AND ZTIMEF
|
||
0584 C9 RET
|
||
|
||
0585 CLEARS:
|
||
0585 C9 RET ;NOT YET IMPLEMENTED
|
||
|
||
0586 3A9921 LPTO: LD A,(NOLPT)
|
||
0589 B7 OR A
|
||
058A C0 RET NZ ;SOME ITEMS DON'T GO TO LPT
|
||
058B 3AC90B LD A,(PRFLG)
|
||
058E B7 OR A
|
||
058F CCB405 CALL Z,LPINIT
|
||
0592 C5 PUSH BC
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 14
|
||
|
||
|
||
0593 D5 PUSH DE
|
||
0594 E5 PUSH HL
|
||
0595 59 LD E,C
|
||
0596 C5 PUSH BC
|
||
0597 0E05 LD C,CLO ;LIST OUT
|
||
0599 CD0500 CALL BDOS
|
||
059C C1 POP BC
|
||
059D 79 LD A,C
|
||
059E FE0D CP 0DH
|
||
05A0 C29704 JP NZ,POPRET ;NOT CR
|
||
05A3 3A0E01 LD A,(CPMLLF)
|
||
05A6 B7 OR A
|
||
05A7 CA9704 JP Z,POPRET
|
||
05AA 1E0A LD E,0AH
|
||
05AC 0E05 LD C,CLO ;OUTPUT LF IF NEEDED
|
||
05AE CD0500 CALL BDOS
|
||
05B1 C39704 JP POPRET
|
||
|
||
05B4 3C LPINIT: INC A
|
||
05B5 32C90B LD (PRFLG),A
|
||
05B8 E5 PUSH HL
|
||
05B9 219401 LD HL,PSTUPS
|
||
05BC CD9402 CALL PCPST ;PRINTER SETUP STRING
|
||
05BF E1 POP HL
|
||
05C0 C9 RET
|
||
|
||
05C1 215201 WHOLIN: LD HL,BSTLIN
|
||
05C4 7E LD A,(HL) ;DO WE HAVE A STATUS LINE?
|
||
05C5 B7 OR A
|
||
05C6 C8 RET Z ;NO, RETURN
|
||
05C7 3AC121 LD A,(CSPERM) ;SAVE DATA CLOBERED BY PRNTDC
|
||
05CA 67 LD H,A
|
||
05CB 3AC221 LD A,(STBYTF)
|
||
05CE 6F LD L,A
|
||
05CF E5 PUSH HL
|
||
05D0 2AC321 LD HL,(ZSTWRD)
|
||
05D3 E5 PUSH HL
|
||
05D4 2AB321 LD HL,(MPCL)
|
||
05D7 E5 PUSH HL
|
||
05D8 2AB221 LD HL,(MPCH)
|
||
05DB E5 PUSH HL
|
||
05DC 215201 LD HL,BSTLIN
|
||
05DF CD7E02 CALL PCSTR ;POSITON TO TOP OF SCREEN
|
||
05E2 AF XOR A
|
||
05E3 32C70B LD (COUTDC),A ;BEGINNING OF LINE
|
||
05E6 3E01 LD A,1
|
||
05E8 329921 LD (NOLPT),A
|
||
05EB 3EFF LD A,0FFH
|
||
05ED 32C60B LD (STAFLG),A ;STATUS LINE FLAG (ANDED WITH CPMINV ADDER)
|
||
05F0 CD7A05 CALL TMCHK
|
||
05F3 C25306 JP NZ,WHOLT
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 15
|
||
|
||
|
||
05F6 CD4506 CALL WHOLN1 ;COMMON TIME/ROOM PRINTING
|
||
05F9 21D306 LD HL,WHOMSG ;PRINT 'SCORE'
|
||
05FC CDB206 CALL POSPST ;POSITION THEN PRINT
|
||
05FF 3E11 LD A,SCOREG
|
||
0601 CD3B13 CALL VARGET
|
||
0604 CD791B CALL PRNTNC
|
||
0607 0E2F LD C,'/'
|
||
0609 CDB604 CALL COUT
|
||
060C 3E12 LD A,MOVESG
|
||
060E CD3B13 CALL VARGET
|
||
0611 CD791B CALL PRNTNC
|
||
0614 3A0301 WHOLN2: LD A,(CPMCPL)
|
||
0617 47 LD B,A
|
||
0618 CDA306 CALL CHRPOS ;BLANK REST OF LINE
|
||
061B 217301 LD HL,ESTLIN
|
||
061E CD7E02 CALL PCSTR ;POSITION BACK TO LOWER LEFT
|
||
0621 AF XOR A
|
||
0622 329921 LD (NOLPT),A
|
||
0625 32C60B LD (STAFLG),A
|
||
0628 32B721 LD (MPCFLG),A ;RESTORE STRING VALUES
|
||
062B E1 POP HL
|
||
062C 7D LD A,L
|
||
062D 32B221 LD (MPCH),A
|
||
0630 E1 POP HL
|
||
0631 22B321 LD (MPCL),HL
|
||
0634 E1 POP HL
|
||
0635 22C321 LD (ZSTWRD),HL
|
||
0638 E1 POP HL
|
||
0639 7C LD A,H
|
||
063A 32C121 LD (CSPERM),A
|
||
063D 7D LD A,L
|
||
063E 32C221 LD (STBYTF),A
|
||
0641 CD2020 CALL GETMOD
|
||
0644 C9 RET
|
||
|
||
|
||
0645 0E20 WHOLN1: LD C,' ' ;PRINT A ' '
|
||
0647 CDB604 CALL COUT
|
||
064A 3E10 LD A,ROOMG ;GET THE CURRENT ROOM NO.
|
||
064C CD3B13 CALL VARGET
|
||
064F 7D LD A,L
|
||
0650 C30316 JP PRNTDC ;PRINT THE SHORT DESCRIPTION
|
||
;
|
||
; PRINT THE TIME (HOURS)
|
||
0653 CD4506 WHOLT: CALL WHOLN1
|
||
0656 21DB06 LD HL,WHOTMS ;PRINT '.......TIME' MESSAGE
|
||
0659 CDB206 CALL POSPST
|
||
065C 3E11 LD A,SCOREG ;GET HOURS IN MILITARY TIME (24 HR CLOCK)
|
||
065E CD3B13 CALL VARGET
|
||
0661 7D LD A,L ;A <= HOURS
|
||
0662 F5 PUSH AF ;SAVE HOURS
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 16
|
||
|
||
|
||
0663 B7 OR A ;HOURS=0?
|
||
0664 C26C06 JP NZ,WHOLT0 ; NO.
|
||
0667 2E0C LD L,12 ; YES. 0 HRS IS REALLY 12 HOURS
|
||
0669 C37406 JP WHOLT1
|
||
;
|
||
066C FE0D WHOLT0: CP 13 ;COMPARE HOURS (24 HR CLOCK) WITH 13
|
||
066E DA7406 JP C,WHOLT1 ; IF < 13 THEN PRINT HOURS
|
||
0671 D60C SUB 12 ; ELSE A <= A-12
|
||
0673 6F LD L,A ; L <= ADJUSTED TIME (12 HR CLOCK)
|
||
0674 CD791B WHOLT1: CALL PRNTNC ;PRINT THE HOURS
|
||
0677 0E3A LD C,':' ;PRINT ':'
|
||
0679 CDB604 CALL COUT
|
||
;
|
||
; PRINT TIME (MINUTES)
|
||
067C 3E12 LD A,MOVESG ;GET THE MINUTES
|
||
067E CD3B13 CALL VARGET ;A <= MINUTES
|
||
0681 CD3B07 CALL PNTTIM ;PRINT THE MINUTES
|
||
0684 0E20 LD C,' ' ;PRINT A ' '
|
||
0686 CDB604 CALL COUT
|
||
;
|
||
; PRINT 'AM/PM'
|
||
0689 0E61 LD C,'a'
|
||
068B F1 POP AF ;RESTORE HOURS
|
||
068C FE18 CP 24 ;24 HOURS IS AM
|
||
068E CA9806 JP Z,WHOLT2
|
||
0691 FE0C CP 12 ;< 12 HOURS IS AM
|
||
0693 DA9806 JP C,WHOLT2
|
||
0696 0E70 LD C,'p' ;ELSE IT'S PM
|
||
0698 CDB604 WHOLT2: CALL COUT ;PRINT 'A/P'
|
||
069B 0E6D LD C,'m'
|
||
069D CDB604 CALL COUT ;PRINT 'M'
|
||
06A0 C31406 JP WHOLN2
|
||
;
|
||
06A3 3AC70B CHRPOS: LD A,(COUTDC) ;SPACE UNTILE COUTDC=(B)
|
||
06A6 B8 CP B
|
||
06A7 D0 RET NC
|
||
06A8 C5 PUSH BC
|
||
06A9 0E20 LD C,20H
|
||
06AB CDB604 CALL COUT
|
||
06AE C1 POP BC
|
||
06AF C3A306 JP CHRPOS
|
||
|
||
06B2 3A0301 POSPST: LD A,(CPMCPL)
|
||
06B5 FE27 CP 39 ;VERY SHORT
|
||
06B7 DACD06 JP C,POSPS1 ;DON'T PRINT WORDS
|
||
06BA D610 SUB 16
|
||
06BC E5 PUSH HL
|
||
06BD 47 LD B,A
|
||
06BE CDA306 CALL CHRPOS ;SPACE OVER
|
||
06C1 E1 POP HL
|
||
06C2 46 LD B,(HL)
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 17
|
||
|
||
|
||
06C3 23 POSPS2: INC HL
|
||
06C4 4E LD C,(HL)
|
||
06C5 CDB604 CALL COUT
|
||
06C8 05 DEC B
|
||
06C9 C2C306 JP NZ,POSPS2
|
||
06CC C9 RET
|
||
|
||
06CD D608 POSPS1: SUB 8 ;MOVE OVER 8 FROM EDGE
|
||
06CF 47 LD B,A
|
||
06D0 C3A306 JP CHRPOS
|
||
|
||
06D3 0753636F WHOMSG: DB 7,'Score:',20H
|
||
|
||
06DB 0654696D WHOTMS: DB 6,'Time:',20H
|
||
|
||
06E2 2D2D2D2D MORMSG: DB '-------------More-------------',0
|
||
001F LMORE EQU $-MORMSG
|
||
|
||
0701 3A0401 MORE: LD A,(CPMLPP)
|
||
0704 B7 OR A
|
||
0705 C8 RET Z ;NO MORE LINE IF 0
|
||
0706 3D DEC A
|
||
0707 77 LD (HL),A
|
||
0708 CDC105 CALL WHOLIN ;SHOW STATUS
|
||
070B 3E01 LD A,1
|
||
070D 329921 LD (NOLPT),A ;DON'T SCRIPT MORE MESSAGE
|
||
0710 21E206 LD HL,MORMSG
|
||
0713 CD480A CALL MSGOUT
|
||
0716 CD3804 CALL CIN
|
||
0719 1E0D LD E,0DH
|
||
071B 0E06 LD C,CDIO ;CR WITHOUT LF
|
||
071D CD0500 CALL BDOS
|
||
0720 061F LD B,LMORE
|
||
0722 C5 MORE1: PUSH BC
|
||
0723 1E20 LD E,20H
|
||
0725 0E06 LD C,CDIO
|
||
0727 CD0500 CALL BDOS
|
||
072A C1 POP BC
|
||
072B 05 DEC B
|
||
072C C22207 JP NZ,MORE1
|
||
072F 1E0D LD E,0DH
|
||
0731 0E06 LD C,CDIO
|
||
0733 CD0500 CALL BDOS
|
||
0736 AF XOR A
|
||
0737 329921 LD (NOLPT),A
|
||
073A C9 RET ;NOW AT BEGINNING OF CLEAR LINE
|
||
|
||
073B 110A00 PNTTIM: LD DE,10
|
||
073E CD071D CALL HLGEDE
|
||
0741 0E30 LD C,'0'
|
||
0743 D4B604 CALL NC,COUT
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 18
|
||
|
||
|
||
0746 C3791B JP PRNTNC
|
||
|
||
;ZZZZZZZZZZZZZZZZZZZZZZZZZZZ
|
||
0749 213101 QUIT: LD HL,RTRMST
|
||
074C CD7E02 CALL PCSTR
|
||
074F 0E00 LD C,CRESET
|
||
0751 CD0500 CALL BDOS
|
||
0754 C34907 JP QUIT
|
||
|
||
0757 RESTAR:
|
||
0757 115C00 LD DE,CPMFCB
|
||
075A 0E10 LD C,CLOSE
|
||
075C CD0500 CALL BDOS
|
||
075F 213101 LD HL,RTRMST
|
||
0762 CD7E02 CALL PCSTR
|
||
0765 C30001 JP START
|
||
|
||
0768 SAVE:
|
||
0768 AF XOR A
|
||
0769 32570C LD (FILTYP),A
|
||
076C 115C00 LD DE,CPMFCB
|
||
076F 0E10 LD C,CLOSE
|
||
0771 CD0500 CALL BDOS
|
||
0774 CD6008 CALL SRGFNM
|
||
0777 115C00 LD DE,CPMFCB
|
||
077A 0E13 LD C,DELETE
|
||
077C CD0500 CALL BDOS
|
||
077F 115C00 LD DE,CPMFCB
|
||
0782 0E16 LD C,MAKEF
|
||
0784 CD0500 CALL BDOS
|
||
0787 3C INC A
|
||
0788 CA2B08 JP Z,SFAIL ;DID NOT OPEN
|
||
078B 2ABB21 LD HL,(ZCODEP)
|
||
078E 010000 LD BC,ZVERS
|
||
0791 09 ADD HL,BC
|
||
0792 7E LD A,(HL) ;STORE VERSION NUMBER
|
||
0793 328000 LD (CPMBUF),A
|
||
0796 2AE90D LD HL,(ZSTAKP)
|
||
0799 228100 LD (CPMBUF+1),HL
|
||
079C 218300 LD HL,CPMBUF+3
|
||
079F 116921 LD DE,SRND
|
||
07A2 012900 LD BC,SRNDC ;TO MAKE EXTERNALS WORK
|
||
07A5 41 LD B,C
|
||
07A6 CD4B03 CALL MOVIT
|
||
07A9 115C00 LD DE,CPMFCB
|
||
07AC 0E15 LD C,WRITES
|
||
07AE CD0500 CALL BDOS
|
||
07B1 B7 OR A
|
||
07B2 C22B08 JP NZ,SFAIL ;WRITE OUT INITIAL STUFF
|
||
07B5 0E04 LD C,0+(((ZSTAKL*2)+127)/128)
|
||
07B7 11EB0D LD DE,ZSTACK ;NEXT WRITE OUT STACK
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 19
|
||
|
||
|
||
07BA 0680 SAVEA: LD B,128
|
||
07BC 218000 LD HL,CPMBUF
|
||
07BF CD4B03 CALL MOVIT
|
||
07C2 C5 PUSH BC
|
||
07C3 D5 PUSH DE
|
||
07C4 115C00 LD DE,CPMFCB
|
||
07C7 0E15 LD C,WRITES
|
||
07C9 CD0500 CALL BDOS
|
||
07CC B7 OR A
|
||
07CD C23E08 JP NZ,SRFAIL
|
||
07D0 D1 POP DE
|
||
07D1 C1 POP BC
|
||
07D2 0D DEC C
|
||
07D3 C2BA07 JP NZ,SAVEA
|
||
07D6 2ABB21 LD HL,(ZCODEP)
|
||
07D9 110E00 LD DE,ZPURBT
|
||
07DC 19 ADD HL,DE
|
||
07DD 4E LD C,(HL) ;COUNT OF PAGES
|
||
07DE 2ABB21 LD HL,(ZCODEP)
|
||
07E1 EB EX DE,HL ;WHERE TO START FROM
|
||
07E2 0602 LD B,2 ;128 BYTE RECORDS
|
||
07E4 C5 SAVE1: PUSH BC
|
||
07E5 218000 LD HL,CPMBUF
|
||
07E8 0680 LD B,128
|
||
07EA CD4B03 CALL MOVIT ;GET NEXT RECORD TO TRANSFER
|
||
07ED D5 PUSH DE
|
||
07EE 115C00 LD DE,CPMFCB
|
||
07F1 0E15 LD C,WRITES ;WRITE IT TO DISK
|
||
07F3 CD0500 CALL BDOS
|
||
07F6 D1 POP DE
|
||
07F7 C1 POP BC
|
||
07F8 B7 OR A
|
||
07F9 C22B08 JP NZ,SFAIL ;WRITE ERROR
|
||
07FC 05 DEC B
|
||
07FD C2E407 JP NZ,SAVE1 ;GO DO 2ND HALF OF PAGE
|
||
0800 0602 LD B,2 ;RESET FOR 2 RECORDS PER PAGE
|
||
0802 0D DEC C ;NEXT PAGE
|
||
0803 F2E407 JP P,SAVE1
|
||
0806 115C00 SRCLOS: LD DE,CPMFCB ;CLOSE FILE, DONE
|
||
0809 0E10 LD C,CLOSE
|
||
080B CD0500 CALL BDOS
|
||
080E 115C00 LD DE,CPMFCB ;OPEN FILE AGAIN TO FORCE
|
||
0811 0E0F LD C,OPEN ;WRITE TO DISK
|
||
0813 CD0500 CALL BDOS
|
||
0816 115C00 LD DE,CPMFCB ;AND CLOSE AGAIN TO BE SURE
|
||
0819 0E0F LD C,OPEN
|
||
081B CD0500 CALL BDOS
|
||
081E CD2109 CALL SRSWPD ;TELL PLAYER SWAP GAME DISK BACK IN
|
||
0821 CDB404 CALL PCRLF
|
||
0824 AF XOR A
|
||
0825 32B021 LD (ZPCFLG),A
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 20
|
||
|
||
|
||
0828 C36213 JP PREDS
|
||
|
||
|
||
|
||
082B 115C00 SFAIL: LD DE,CPMFCB
|
||
082E 0E10 LD C,CLOSE
|
||
0830 CD0500 CALL BDOS
|
||
0833 115C00 LD DE,CPMFCB
|
||
0836 0E13 LD C,DELETE
|
||
0838 CD0500 CALL BDOS
|
||
083B C35608 JP SFAIL1
|
||
|
||
083E 115C00 SRFAIL: LD DE,CPMFCB
|
||
0841 0E10 LD C,CLOSE
|
||
0843 CD0500 CALL BDOS
|
||
0846 115C00 LD DE,CPMFCB ;REOPEN TO FORCE WRITE TO DISK
|
||
0849 0E0F LD C,OPEN
|
||
084B CD0500 CALL BDOS
|
||
084E 115C00 LD DE,CPMFCB ;CLOSE FOR SECURITY
|
||
0851 0E10 LD C,CLOSE
|
||
0853 CD0500 CALL BDOS
|
||
0856 CD2109 SFAIL1: CALL SRSWPD
|
||
0859 AF XOR A
|
||
085A 32B021 LD (ZPCFLG),A
|
||
085D C35313 JP PREDF
|
||
|
||
0860 21EA09 SRGFNM: LD HL,SRMSG1 ;/LOAD SAVE DISK/
|
||
0863 CD480A CALL MSGOUT
|
||
|
||
0866 0608 LD B,8
|
||
0868 21EC02 LD HL,SRDFNM+1 ;FILENAME
|
||
086B CDE208 CALL SRGFNA ;DISPLAY CHARS TILL HIT BLANKS
|
||
086E 21460A LD HL,SRMSG3
|
||
0871 CD480A CALL MSGOUT
|
||
0874 0603 LD B,3
|
||
0876 21F402 LD HL,SRDFNM+9
|
||
0879 CDE208 CALL SRGFNA
|
||
087C 21260A LD HL,SRMSG2
|
||
087F CD480A CALL MSGOUT
|
||
0882 210000 LD HL,0
|
||
0885 226800 LD (CPMFCB+12),HL ;CLEAR EX,S1
|
||
0888 226A00 LD (CPMFCB+14),HL ; S2,RC
|
||
088B AF XOR A
|
||
088C 327C00 LD (CPMCR),A ; CR
|
||
088F 118000 LD DE,CPMBUF
|
||
0892 3E0E LD A,14
|
||
0894 12 LD (DE),A
|
||
0895 0E0A LD C,CRCBUF ;READ CONSOLE BUFFER
|
||
0897 CD0500 CALL BDOS
|
||
089A CD7304 CALL PCRLFD
|
||
089D 3A8100 LD A,(CPMBUF+1)
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 21
|
||
|
||
|
||
08A0 B7 OR A
|
||
08A1 CA1609 JP Z,SRGDFN ;USE DEFAULT, SKIP THIS NEXT PART
|
||
08A4 060B LD B,11
|
||
08A6 21EB02 LD HL,SRDFNM
|
||
08A9 23 INC HL ;SKIP OVER DRIVE, LEAVE AS WAS SO PLAYER
|
||
08AA ;NEED ONLY SPECIFY IT ONCE
|
||
08AA 3620 SRGFM1: LD (HL),20H
|
||
08AC 23 INC HL
|
||
08AD 05 DEC B
|
||
08AE C2AA08 JP NZ,SRGFM1 ;FILL WITH BLANK FILE NAME
|
||
08B1 47 LD B,A ;SAVE COUNT OF CHARACTERS
|
||
08B2 218200 LD HL,CPMBUF+2 ;BEG OF FILE NAME
|
||
08B5 11EC02 LD DE,SRDFNM+1 ;STORAGE FOR FILE NAME
|
||
08B8 FE03 CP 3
|
||
08BA DACF08 JP C,SRGFN2 ;NO DRIVE SPEC
|
||
08BD 3A8300 LD A,(CPMBUF+3)
|
||
08C0 FE3A CP ':' ;DRIVE SPEC?
|
||
08C2 C2CF08 JP NZ,SRGFN2 ;NONE THIS TIME
|
||
08C5 05 DEC B
|
||
08C6 05 DEC B
|
||
08C7 7E LD A,(HL)
|
||
08C8 E60F AND 0FH ;DRIVE NUMBER
|
||
08CA 32EB02 LD (SRDFNM),A
|
||
08CD 23 INC HL
|
||
08CE 23 INC HL ;POINTER PAST DRIVE SPEC
|
||
08CF 05 SRGFN2: DEC B
|
||
08D0 FA1609 JP M,SRGDFN ;FILE NAME NOW DEFAULT
|
||
08D3 7E LD A,(HL)
|
||
08D4 CD0309 CALL UPPER
|
||
08D7 23 INC HL
|
||
08D8 FE2E CP '.'
|
||
08DA CA0C09 JP Z,SRGFN3 ;EXTENTION
|
||
08DD 12 LD (DE),A
|
||
08DE 13 INC DE
|
||
08DF C3CF08 JP SRGFN2
|
||
|
||
08E2 7E SRGFNA: LD A,(HL)
|
||
08E3 FE20 CP ' '
|
||
08E5 CAFD08 JP Z,SRGFNB
|
||
08E8 4F LD C,A
|
||
08E9 C5 PUSH BC
|
||
08EA D5 PUSH DE
|
||
08EB E5 PUSH HL
|
||
08EC 5E LD E,(HL)
|
||
08ED 0E06 LD C,CDIO
|
||
08EF CD0500 CALL BDOS
|
||
08F2 E1 POP HL
|
||
08F3 E5 PUSH HL
|
||
08F4 CD640A CALL MSGCRC ;SEND LF IF NECESSARY
|
||
08F7 E1 POP HL
|
||
08F8 D1 POP DE
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 22
|
||
|
||
|
||
08F9 C1 POP BC
|
||
08FA CD9B04 CALL LPCHK
|
||
08FD 23 SRGFNB: INC HL
|
||
08FE 05 DEC B
|
||
08FF C2E208 JP NZ,SRGFNA
|
||
0902 C9 RET
|
||
|
||
0903 FE61 UPPER: CP 'a'
|
||
0905 D8 RET C
|
||
0906 FE7B CP 'z'+1
|
||
0908 D0 RET NC
|
||
0909 D620 SUB 'a'-'A'
|
||
090B C9 RET
|
||
|
||
090C 11F402 SRGFN3: LD DE,SRDFNM+9
|
||
090F 78 LD A,B
|
||
0910 E603 AND 3 ;MAX OF 3 CHARACTERS
|
||
0912 47 LD B,A
|
||
0913 C3CF08 JP SRGFN2
|
||
|
||
0916 11EB02 SRGDFN: LD DE,SRDFNM ;DEFAULT FILE NAME
|
||
0919 215C00 LD HL,CPMFCB
|
||
091C 060C LD B,12
|
||
091E C34B03 JP MOVIT
|
||
|
||
0921 213209 SRSWPD: LD HL,LFILDG
|
||
0924 CD480A MSGRES: CALL MSGOUT ;MESSAGE THEN RESPONSE
|
||
0927 CD3804 CALL CIN ;WAIT FOR CHARACTER
|
||
092A 213009 LD HL,CRMSG
|
||
092D C3480A JP MSGOUT
|
||
|
||
0930 0D00 CRMSG: DB 0DH,0
|
||
|
||
0932 4C6F6164 LFILDG: DB 'Load Game Disk if it was removed.',0DH
|
||
0954 54797065 DB 'Type <ENTER> to continue >',0
|
||
096F 4C6F6164 LFILDM: DB 'Load Disk 2, type <ENTER> to continue >',0
|
||
0997 4C6F6164 LFILPM: DB 'Load Disk 1, type <ENTER> to continue >',0
|
||
09BF 4C6F6164 LFILGM: DB 'Load Game Disk, type <ENTER> to continue >',0
|
||
|
||
09EA 4C6F6164 SRMSG1: DB 'Load SAVE disk then enter file name.',0DH
|
||
0A0F 28646566 DB '(default file name is ',0
|
||
|
||
0A26 292E0D SRMSG2: DB ').',0DH
|
||
0A29 54797065 DB 'Type <ENTER> to continue > ',0
|
||
|
||
0A46 2E00 SRMSG3: DB '.',0
|
||
|
||
0A48 4E MSGOUT: LD C,(HL)
|
||
0A49 7E LD A,(HL)
|
||
0A4A B7 OR A
|
||
0A4B C8 RET Z
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 23
|
||
|
||
|
||
0A4C C5 PUSH BC
|
||
0A4D D5 PUSH DE
|
||
0A4E E5 PUSH HL
|
||
0A4F 5E LD E,(HL)
|
||
0A50 0E06 LD C,CDIO
|
||
0A52 CD0500 CALL BDOS
|
||
0A55 E1 POP HL
|
||
0A56 E5 PUSH HL
|
||
0A57 CD640A CALL MSGCRC
|
||
0A5A E1 POP HL
|
||
0A5B D1 POP DE
|
||
0A5C C1 POP BC
|
||
0A5D CD9B04 CALL LPCHK
|
||
0A60 23 INC HL
|
||
0A61 C3480A JP MSGOUT
|
||
|
||
0A64 3A0D01 MSGCRC: LD A,(CPMCLF)
|
||
0A67 B7 OR A
|
||
0A68 C8 RET Z ;NO LF AFTER CR
|
||
0A69 7E LD A,(HL)
|
||
0A6A FE0D CP 0DH
|
||
0A6C C0 RET NZ ;NOT CR
|
||
0A6D 1E0A LD E,0AH ;PRINT A LF
|
||
0A6F 0E06 LD C,CDIO
|
||
0A71 CD0500 CALL BDOS
|
||
0A74 C9 RET
|
||
|
||
|
||
0A75 AF RESTOR: XOR A
|
||
0A76 32570C LD (FILTYP),A
|
||
0A79 115C00 LD DE,CPMFCB
|
||
0A7C 0E10 LD C,CLOSE
|
||
0A7E CD0500 CALL BDOS
|
||
0A81 CD6008 CALL SRGFNM
|
||
0A84 115C00 LD DE,CPMFCB
|
||
0A87 0E0F LD C,OPEN
|
||
0A89 CD0500 CALL BDOS
|
||
0A8C 3C INC A
|
||
0A8D CA3E08 JP Z,SRFAIL
|
||
0A90 115C00 LD DE,CPMFCB
|
||
0A93 0E14 LD C,READS
|
||
0A95 CD0500 CALL BDOS
|
||
0A98 B7 OR A
|
||
0A99 C23E08 JP NZ,SRFAIL
|
||
0A9C 2ABB21 LD HL,(ZCODEP)
|
||
0A9F 110000 LD DE,ZVERS
|
||
0AA2 19 ADD HL,DE
|
||
0AA3 3A8000 LD A,(CPMBUF)
|
||
0AA6 BE CP (HL)
|
||
0AA7 C23E08 JP NZ,SRFAIL ;VERSIONS DIFFER
|
||
0AAA 2A8100 LD HL,(CPMBUF+1)
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 24
|
||
|
||
|
||
0AAD 22E90D LD (ZSTAKP),HL ;STACK POINTER
|
||
0AB0 118300 LD DE,CPMBUF+3
|
||
0AB3 216921 LD HL,SRND
|
||
0AB6 012900 LD BC,SRNDC ;TO MAKE EXTERNALS WORK
|
||
0AB9 41 LD B,C
|
||
0ABA CD4B03 CALL MOVIT ;RESTORE RANDOM DATA
|
||
0ABD 0E03 LD C,0+(((ZSTAKL*2)-1)/128) ;ONE TOO FEW
|
||
0ABF 21EB0D LD HL,ZSTACK ;NEXT WRITE OUT STACK
|
||
0AC2 C5 RESTA: PUSH BC
|
||
0AC3 E5 PUSH HL
|
||
0AC4 115C00 LD DE,CPMFCB
|
||
0AC7 0E14 LD C,READS
|
||
0AC9 CD0500 CALL BDOS
|
||
0ACC E1 POP HL
|
||
0ACD C1 POP BC
|
||
0ACE B7 OR A
|
||
0ACF C23E08 JP NZ,SRFAIL
|
||
0AD2 118000 LD DE,CPMBUF
|
||
0AD5 0680 LD B,128
|
||
0AD7 CD4B03 CALL MOVIT
|
||
0ADA 0D DEC C
|
||
0ADB C2C20A JP NZ,RESTA
|
||
0ADE E5 PUSH HL ;READ LAST BLOCK
|
||
0ADF 115C00 LD DE,CPMFCB
|
||
0AE2 0E14 LD C,READS
|
||
0AE4 CD0500 CALL BDOS
|
||
0AE7 E1 POP HL
|
||
0AE8 B7 OR A
|
||
0AE9 C23E08 JP NZ,SRFAIL
|
||
0AEC 118000 LD DE,CPMBUF
|
||
0AEF 0640 LD B,0+((ZSTAKL*2)-((((ZSTAKL*2)-1)/128)*128))
|
||
0AF1 CD4B03 CALL MOVIT
|
||
0AF4 2ABB21 LD HL,(ZCODEP)
|
||
0AF7 111100 LD DE,ZSCRIP+1
|
||
0AFA 19 ADD HL,DE
|
||
0AFB 22CA0B LD (SCPLOC),HL ;LOCATION OF SCRIPT FLAG
|
||
0AFE 7E LD A,(HL)
|
||
0AFF E601 AND 1 ;ISOLATE SCRIPT BIT
|
||
0B01 32CC0B LD (SCPVAL),A ;AND SAVE
|
||
0B04 2ABB21 LD HL,(ZCODEP)
|
||
0B07 110E00 LD DE,ZPURBT
|
||
0B0A 19 ADD HL,DE
|
||
0B0B 4E LD C,(HL)
|
||
0B0C 2ABB21 LD HL,(ZCODEP) ;POINTER TO BEGINNING OF DATA
|
||
0B0F 0602 LD B,2 ;128 BYTE RECORDS
|
||
0B11 C5 REST1: PUSH BC
|
||
0B12 E5 PUSH HL
|
||
0B13 115C00 LD DE,CPMFCB
|
||
0B16 0E14 LD C,READS
|
||
0B18 CD0500 CALL BDOS
|
||
0B1B E1 POP HL
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 25
|
||
|
||
|
||
0B1C C1 POP BC
|
||
0B1D B7 OR A
|
||
0B1E C25707 JP NZ,RESTAR
|
||
0B21 118000 LD DE,CPMBUF
|
||
0B24 C5 PUSH BC
|
||
0B25 0680 LD B,128
|
||
0B27 CD4B03 CALL MOVIT
|
||
0B2A C1 POP BC
|
||
0B2B 05 DEC B
|
||
0B2C C2110B JP NZ,REST1
|
||
0B2F 0602 LD B,2
|
||
0B31 0D DEC C
|
||
0B32 F2110B JP P,REST1
|
||
0B35 2ACA0B LD HL,(SCPLOC)
|
||
0B38 7E LD A,(HL)
|
||
0B39 E6FE AND 0FEH ;CLEAR SCRIPT BIT
|
||
0B3B E5 PUSH HL
|
||
0B3C 21CC0B LD HL,SCPVAL
|
||
0B3F B6 OR (HL) ;OR IN VALUE FROM MEMORY
|
||
0B40 E1 POP HL
|
||
0B41 77 LD (HL),A
|
||
0B42 C30608 JP SRCLOS ;ALL DONE
|
||
|
||
0B45 F5 LFILS: PUSH AF
|
||
0B46 3A570C LD A,(FILTYP)
|
||
0B49 FE03 CP 3 ;.DAT FILE ALREADY OPEN?
|
||
0B4B CAB50B JP Z,LFILR ; YES. RETURN.
|
||
0B4E B7 OR A ; NO. SOME OTHER TYPE OPEN?
|
||
0B4F C2B50B JP NZ,LFILR ; YES. RETURN.
|
||
0B52 11C702 LFILS1: LD DE,FNDAT ; NO. ^ DATA FILE NAME
|
||
0B55 3E03 LD A,3 ;OPEN TYPE 3
|
||
0B57 CD1B02 CALL OPNDK1 ;TRY TO OPEN FILE
|
||
0B5A C2B50B JP NZ,LFILR ;OPEN .DAT FILE COMPLETE?
|
||
0B5D ;YES. RETURN.
|
||
0B5D 3AB501 LD A,(TWODSK) ;CHECK IF STORY ON 2 DISKS
|
||
0B60 FE01 CP 1
|
||
0B62 CA6E0B JP Z,LFILF ;IF 1, 2 DISKS
|
||
0B65 21BF09 LD HL,LFILGM ;ASK FOR DISK
|
||
0B68 CD2409 CALL MSGRES
|
||
0B6B C3520B JP LFILS1 ;TRY AGAIN
|
||
|
||
0B6E AF LFILF: XOR A ; NO. SET FILTYP=0
|
||
0B6F 32570C LD (FILTYP),A ;OPEN FAILED TRY OTHER TYPE
|
||
0B72 C3B50B JP LFILR
|
||
|
||
0B75 F5 LFILD: PUSH AF
|
||
0B76 3A570C LD A,(FILTYP)
|
||
0B79 FE02 CP 2 ;.PUR FILE ALREADY OPEN?
|
||
0B7B CAB50B JP Z,LFILR ; YES.ALREADY OPEN
|
||
0B7E CDB70B CALL LFILC ;CLOSE EXISTING FILE IF ANY
|
||
0B81 11D302 LFILD1: LD DE,FNPUR
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 26
|
||
|
||
|
||
0B84 3E02 LD A,2
|
||
0B86 CD1B02 CALL OPNDK1 ;TRY TO OPEN PURELOAD FILE
|
||
0B89 C2B50B JP NZ,LFILR ;OPEN OK
|
||
0B8C 216F09 LD HL,LFILDM
|
||
0B8F CD2409 CALL MSGRES ;ASK TO LOAD DISK
|
||
0B92 C3810B JP LFILD1 ;TRY AGAIN
|
||
|
||
0B95 F5 LFILP: PUSH AF
|
||
0B96 3A570C LD A,(FILTYP)
|
||
0B99 FE01 CP 1 ;PRELOAD TYPE?
|
||
0B9B CAB50B JP Z,LFILR ;OPEN
|
||
0B9E CDB70B CALL LFILC
|
||
0BA1 11DF02 LFILP1: LD DE,FNPRE
|
||
0BA4 3E01 LD A,1
|
||
0BA6 CD1B02 CALL OPNDK1
|
||
0BA9 C2B50B JP NZ,LFILR ;OPEN OK
|
||
0BAC 219709 LD HL,LFILPM
|
||
0BAF CD2409 CALL MSGRES ;LOAD PROPER DISK
|
||
0BB2 C3A10B JP LFILP1
|
||
|
||
0BB5 F1 LFILR: POP AF
|
||
0BB6 C9 RET
|
||
|
||
0BB7 B7 LFILC: OR A
|
||
0BB8 C8 RET Z ;NONE OPEN
|
||
0BB9 115C00 LD DE,CPMFCB
|
||
0BBC 0E10 LD C,CLOSE
|
||
0BBE CD0500 CALL BDOS
|
||
0BC1 AF XOR A
|
||
0BC2 32570C LD (FILTYP),A
|
||
0BC5 C9 RET
|
||
|
||
;DATA
|
||
|
||
0BC6 00 STAFLG: DB 0 ;0FFH WHEN IN STATUS LINE MODE
|
||
0BC7 00 COUTDC: DB 0 ;CHARACTER COUNT UNDER STATUS LINE
|
||
0BC8 00 RDFLG: DB 0 ;0 FOR FIRST READ
|
||
0BC9 00 PRFLG: DB 0 ;0 FOR FIRST PRINT
|
||
0BCA 0000 SCPLOC: DW 0 ;SCRIPT LOCATION
|
||
0BCC 00 SCPVAL: DB 0 ;SCRIPT VALUE
|
||
0BCD 0000 DBUFP: DW 0 ;DSK POINTER
|
||
0BCF 00 NCHARS: DB 0
|
||
0BD0 CHARS: DS CPLMAX
|
||
0C55 D00B CHRPNT: DW CHARS
|
||
|
||
0C57 00 FILTYP: DB 0 ;0 FOR NONE, 1 FOR PRE, 2 FOR PUR, 3 FOR DAT
|
||
0C58 17 MORCNT: DB 23
|
||
|
||
;(PUT IN CODE SEGMENT TO PRESERVE COMMON ZORKBODY)
|
||
0C59 PDL: DS LPDL ;CONTROL STACK
|
||
0DE9 AB0F ZSTAKP: DW ZSTACK+(2*ZSTAKL) ;POINTER TO CURRENT ZSTACK
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 27
|
||
|
||
|
||
0DEB ZSTACK: DS ZSTAKL*2 ;ZSTACK
|
||
0FAB PGTBL: DS MAXPGS ;PAGE NUMBER, 0 ALWAYS IN MEMORY, THUS 0=FREE
|
||
0FEB PGTBLF: DS MAXPGS ;NEXT LINK POINTER, 0FFH IMPLIES END POINT
|
||
102B PGTBLB: DS MAXPGS ;PREVIOUS LINK POINTER
|
||
0040 PGTFD EQU PGTBLF-PGTBL
|
||
0080 PGTBD EQU PGTBLB-PGTBL
|
||
|
||
106B 0D555044 VRS: DB 0DH,'UPDATED 2.5.85',0DH,0
|
||
107C 0D564552 VRLINE: DB 0DH,'VERSION C',0DH,0
|
||
;
|
||
; **********************************************************************
|
||
; * *
|
||
; * WARMSTART ENTRY *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
;
|
||
; MAIN BODY OF CODE STARTS HERE.
|
||
;
|
||
1088 AF BODY: XOR A
|
||
1089 32B021 LD (ZPCFLG),A ;DISABLE TIME IN STATUS LINE, NO SPLIT FILE, NOT TANDY
|
||
108C 32B721 LD (MPCFLG),A ;NO VALID MEMORY IN FROM DISK (MPCPNT NOT VALID)
|
||
108F 32BE21 LD (PGTOP),A ;SET TOP OF LIST PAGE
|
||
|
||
1092 0E19 LD C,RETCUR ;GET CURRENT DEFAULT DRIVE
|
||
1094 CD0500 CALL BDOS ;RETS IN A
|
||
1097 5F LD E,A ;SET DEFAULT DRIVE
|
||
1098 0E0E LD C,CPMSEL ;THIS SEEMS REDUNDENT BUT THE MACHINE IS NOT
|
||
109A CD0500 CALL BDOS ;RECOGNIZING RESETS FROM BOOT DRIVE DONE BEFORE
|
||
109D ;STARTING THE GAME
|
||
|
||
;
|
||
; INITIALIZE ZSTACK
|
||
;
|
||
109D 3E01 LD A,1
|
||
109F 328A21 LD (ZSTAKC),A ;INITIALIZE ZSTACK POSITION COUNTER
|
||
10A2 21AB0F LD HL,ZSTACK+(2*ZSTAKL)
|
||
10A5 22E90D LD (ZSTAKP),HL ;SAVE THE LOCATION OF THE BOTTOM OF ZSTACK IN
|
||
; ZSTACK POINTER
|
||
;
|
||
; INITIALIZE PAGE TABLES
|
||
;
|
||
10A8 11AB0F LD DE,PGTBL ;DE ^ TOP OF PAGE TABLE
|
||
10AB 010040 LD BC,0+(MAXPGS*256) ;FOR NUMBER OF PAGES (IN B)
|
||
;
|
||
10AE START1:
|
||
; INITIALIZE PGTBL
|
||
10AE AF XOR A
|
||
10AF 12 LD (DE),A ;(PGTBL+PAGE NUMBER) <= 0
|
||
; FREE THE PAGE (NO PAGE IN MEMORY)
|
||
;
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 28
|
||
|
||
|
||
10B0 214000 LD HL,PGTFD ;HL <= MAXIMUM NUMBER OF PAGES
|
||
; USED AS AN OFFSET INTO PGTBLF
|
||
;
|
||
; INITIALIZE FOWARD POINTER
|
||
10B3 19 ADD HL,DE ;HL ^ PAGE FORWARD POINTER TABLE SLOT
|
||
10B4 71 LD (HL),C ;SAVE CURRENT POINTER
|
||
10B5 34 INC (HL) ;ADD 1 TO MAKE IT A FORWARD POINTER
|
||
;
|
||
; INITIALIZE PREVIOUS POINTER
|
||
10B6 218000 LD HL,PGTBD ;HL ^ PAGE PREVIOUS POINTER TABLE BASE ADDRESS
|
||
10B9 19 ADD HL,DE ;ADD OFFSET
|
||
10BA 71 LD (HL),C ;SAVE CURRENT POINTER
|
||
10BB 35 DEC (HL) ;SUBTRACT 1 TO MAKE IT A PREVIOUS POINTER
|
||
;
|
||
; UPDATE
|
||
10BC 0C INC C ;NEXT PAGE
|
||
10BD 13 INC DE ;NEXT SLOT IN TABLES
|
||
;
|
||
; TEST LOOP FOR DONE
|
||
10BE 05 DEC B ;DECREMENT NUMBER OF SLOTS REMAINING
|
||
10BF C2AE10 JP NZ,START1 ;>0? YES. CONTINUE LOOPING.
|
||
;
|
||
; CORRECT FOR NO FORWARD POINTER FOR LAST PAGE
|
||
;
|
||
10C2 213F00 LD HL,PGTFD-1
|
||
10C5 19 ADD HL,DE
|
||
10C6 36FF LD (HL),0FFH
|
||
;
|
||
; SET BOTTOM PAGE NO.
|
||
;
|
||
10C8 3E3F LD A,MAXPGS-1
|
||
10CA 32BF21 LD (PGBOT),A
|
||
;
|
||
; COMPUTE ZCODE STARTING ADDRESSS
|
||
;
|
||
10CD 21CD21 LD HL,LMEMRY ;POINT HL PAST ZIP
|
||
10D0 11FF00 LD DE,0FFH ;ADJUST ADDRESS TO A PAGE BOUNDRY
|
||
10D3 19 ADD HL,DE
|
||
10D4 2E00 LD L,0
|
||
10D6 22BB21 LD (ZCODEP),HL ;SAVE ZCODE STARTING ADDRESS
|
||
;
|
||
; SET UP FILE NAMES FOR DAT, PRE, PUR AND SAV
|
||
;
|
||
10D9 CDAA02 CALL SETFIL ;APPEND GAME NAME PREFIX TO FILE NAME EXTENSIONS
|
||
;
|
||
; RESET FILE TYPE
|
||
;
|
||
10DC AF XOR A ;RESET FILTYP
|
||
10DD 32570C LD (FILTYP),A
|
||
;
|
||
; INITIALIZE TERMINAL
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 29
|
||
|
||
|
||
;
|
||
10E0 211001 LD HL,ITRMST ;POINT TO TERMINAL INITIALIZATION STRING
|
||
10E3 CD7E02 CALL PCSTR ; FOR HOME, CLEAR SCREEN AND PRINT IT
|
||
;
|
||
; INITIALIZE TERMINAL RELATED COUNTERS
|
||
;
|
||
10E6 3A0401 LD A,(CPMLPP) ;INITIALIZE LINES/PAGE (EXCLUDING STATUS LINE)
|
||
10E9 3D DEC A ;COUNTER (MORCNT) =(CPMLPP)-1
|
||
10EA 32580C LD (MORCNT),A ; WHICH TELLS THE PROGRAM WHEN TO PRINT ....MORE....
|
||
10ED AF XOR A ;A<=0
|
||
10EE 32CF0B LD (NCHARS),A ;RESET (NCHARS)
|
||
10F1 21D00B LD HL,CHARS ;SET UP CHARACTERS/LINE
|
||
10F4 22550C LD (CHRPNT),HL
|
||
;
|
||
; GET THE FIRST SECTOR OF ZCODE
|
||
;
|
||
10F7 2ABB21 LD HL,(ZCODEP) ;^ TOP OF ZCODE BUFFER
|
||
10FA AF XOR A
|
||
10FB CDF702 CALL GETDSK ;READ IN FIRST SECTION
|
||
;
|
||
; EXTRACT GAME DATA FROM ZCODE HEADER
|
||
;
|
||
10FE 2ABB21 LD HL,(ZCODEP) ;HL ^ TOP OF ZCODE BUFFER
|
||
1101 110400 LD DE,ZENDLD ;DE <= OFFSET TO NON-PRELOADED ZCODE
|
||
1104 19 ADD HL,DE ;HL ^ START OF NON-PRELOADED ZCODE
|
||
1105 56 LD D,(HL) ;GET MSB OF ENDLOAD POINTER
|
||
1106 23 INC HL ; ADD 1
|
||
1107 5E LD E,(HL) ;GET LSB OF ENDLOAD POINTER
|
||
1108 210002 LD HL,200H ;HL <= 256
|
||
110B 19 ADD HL,DE ;HL <= ENDLOAD POINTER + 200H
|
||
110C 7C LD A,H ;A <= MSB
|
||
110D E6FE AND 0FEH ;
|
||
110F 67 LD H,A ;
|
||
1110 2E00 LD L,0 ;
|
||
1112 2B DEC HL ;ALL THIS TO GET TO BLOCK BOUNDRY
|
||
1113 EB EX DE,HL ;DE <= CORRECTED ENDLOAD POINTER
|
||
1114 010400 LD BC,ZENDLD ;BC <= OFFSET TO NON-PRELOADED ZCODE
|
||
1117 2ABB21 LD HL,(ZCODEP) ;HL ^ TOP OF ZCODE BUFFER
|
||
111A 09 ADD HL,BC ;HL ^ START OF NON-PRELOADED ZCODE
|
||
111B 72 LD (HL),D ;SAVE MSB OF CORRECTED ENDLOAD POINTER
|
||
111C 23 INC HL
|
||
111D 73 LD (HL),E ;SAVE LSB OF CORRECTED ENDLOAD POINTER
|
||
111E 2ABB21 LD HL,(ZCODEP) ;HL ^ TOP OF ZCODE BUFFER
|
||
1121 D5 PUSH DE ;SAVE CORRECTED ENDLOAD POINTER ON STACK
|
||
1122 19 ADD HL,DE ;HL ^ END OF PRELOAD
|
||
1123 EB EX DE,HL ;DE ^ END OF PRELOAD
|
||
1124 CD0902 CALL MEMTOP ;DETERMINE WHERE THE TOP OF MEMORY IS (IN HL)
|
||
1127 EB EX DE,HL ;DE <= TOP OF MEMORY, HL <= END OF THE PRELOAD
|
||
1128 CD071D CALL HLGEDE ;CARRY FLAG SET IF HL G.E. DE
|
||
112B D1 POP DE ;RESTORE CORRECTED ENDLOAD POINTER
|
||
112C DC0602 CALL C,ZER ;NO ROOM FOR ANY BUFFERS
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 30
|
||
|
||
|
||
112F 7A LD A,D
|
||
1130 0F RRCA
|
||
1131 E67F AND 7FH
|
||
1133 57 LD D,A ;NUMBER OF PAGES IN REST OF THE PRELOAD
|
||
1134 3C INC A
|
||
1135 329B21 LD (ZMEMT),A ;PAGE NUMBER
|
||
1138 2ABB21 LD HL,(ZCODEP) ;^ START OF ZCODE BUFFER
|
||
113B 010002 LD BC,200H
|
||
113E 1E00 LD E,0
|
||
;
|
||
; LOAD PRELOAD
|
||
;
|
||
1140 7A START2: LD A,D ;A <= PAGES REMAINING TO BE LOADED
|
||
1141 B7 OR A ;DONE?
|
||
1142 CA5511 JP Z,START3 ; YES.
|
||
1145 15 DEC D
|
||
1146 09 ADD HL,BC
|
||
1147 1C INC E
|
||
1148 7B LD A,E
|
||
1149 C5 PUSH BC
|
||
114A D5 PUSH DE
|
||
114B E5 PUSH HL
|
||
114C CDF702 CALL GETDSK
|
||
114F E1 POP HL
|
||
1150 D1 POP DE
|
||
1151 C1 POP BC
|
||
1152 C34011 JP START2
|
||
|
||
1155 2ABB21 START3: LD HL,(ZCODEP)
|
||
1158 EB EX DE,HL
|
||
1159 210100 LD HL,ZSWAP
|
||
115C 19 ADD HL,DE
|
||
115D 7E LD A,(HL)
|
||
115E E601 AND 1
|
||
1160 C40602 CALL NZ,ZER ;SWAPPED
|
||
1163 210700 LD HL,ZSTART+1
|
||
1166 19 ADD HL,DE
|
||
1167 7E LD A,(HL)
|
||
1168 328821 LD (ZPCL),A
|
||
116B 2B DEC HL
|
||
116C 7E LD A,(HL)
|
||
116D E601 AND 1
|
||
116F 328921 LD (ZPCL+1),A
|
||
1172 7E LD A,(HL)
|
||
1173 0F RRCA
|
||
1174 E67F AND 7FH
|
||
1176 328721 LD (ZPCH),A
|
||
1179 210C00 LD HL,ZGLOBA
|
||
117C 19 ADD HL,DE ;GET RELATIVE ADDRESS OF GLOBAL TABLE
|
||
117D D5 PUSH DE
|
||
117E 56 LD D,(HL)
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 31
|
||
|
||
|
||
117F 23 INC HL
|
||
1180 5E LD E,(HL)
|
||
1181 EB EX DE,HL
|
||
1182 D1 POP DE
|
||
1183 19 ADD HL,DE ;REAL ADDRESS OF GLOBAL TABLE
|
||
1184 22A721 LD (GLOBAL),HL ;STORE IT
|
||
1187 211800 LD HL,ZFWORD
|
||
118A 19 ADD HL,DE ;GET RELATIVE ADDRESS OF FWORDS TABLE
|
||
118B D5 PUSH DE
|
||
118C 56 LD D,(HL)
|
||
118D 23 INC HL
|
||
118E 5E LD E,(HL)
|
||
118F EB EX DE,HL
|
||
1190 D1 POP DE
|
||
1191 19 ADD HL,DE ;REAL ADDRESS OF FWORDS TABLE
|
||
1192 22AA21 LD (FWORDS),HL ;STORE IT
|
||
1195 210400 LD HL,ZENDLD ;CALCULATE ^ TO BEGINNING OF PAGE BUFFERS
|
||
1198 19 ADD HL,DE
|
||
1199 D5 PUSH DE
|
||
119A 56 LD D,(HL)
|
||
119B 23 INC HL
|
||
119C 5E LD E,(HL)
|
||
119D E1 POP HL
|
||
119E 19 ADD HL,DE
|
||
119F 23 INC HL
|
||
11A0 22B921 LD (PGBUFP),HL ;STORE IT
|
||
11A3 2B DEC HL ;CALCULATE NO. OF AVAILABLE PAGES
|
||
11A4 EB EX DE,HL ;TOP LOCATION
|
||
11A5 CD0902 CALL MEMTOP
|
||
11A8 7C LD A,H
|
||
11A9 92 SUB D
|
||
11AA 0F RRCA
|
||
11AB E67F AND 7FH ;SWAPPING SPACE
|
||
11AD FE40 CP MAXPGS
|
||
11AF DAB411 JP C,STAR3A
|
||
11B2 3E40 LD A,MAXPGS
|
||
11B4 32BD21 STAR3A: LD (NPGS),A ;SAVE NUMBER OF PAGES
|
||
11B7 3D DEC A
|
||
11B8 32BF21 LD (PGBOT),A
|
||
11BB 21EB0F LD HL,PGTBLF
|
||
11BE CDEA1E CALL HLOFF
|
||
11C1 36FF LD (HL),0FFH ;SET LAST PAGE
|
||
;
|
||
; INITIALIZE RANDOM NUMBER
|
||
;
|
||
11C3 0605 LD B,5
|
||
11C5 21FFFF LD HL,0FFFFH
|
||
11C8 228E21 LD (SHIFT),HL
|
||
11CB 229021 LD (SHIFT+2),HL
|
||
11CE 21C80B LD HL,RDFLG ;ET FLAG TO 1ST READ
|
||
11D1 3600 LD (HL),0
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 32
|
||
|
||
|
||
11D3 CDD01B START4: CALL RND
|
||
11D6 05 DEC B
|
||
11D7 C2D311 JP NZ,START4
|
||
;
|
||
;
|
||
;
|
||
11DA AF XOR A
|
||
11DB 329921 LD (NOLPT),A ;USE LPT
|
||
11DE 2ABB21 LD HL,(ZCODEP)
|
||
11E1 110100 LD DE,ZSWAP
|
||
11E4 19 ADD HL,DE
|
||
11E5 7E LD A,(HL)
|
||
11E6 47 LD B,A
|
||
11E7 3A5201 LD A,(BSTLIN) ;IS THERE A STATUS LINE?
|
||
11EA B7 OR A
|
||
11EB 78 LD A,B
|
||
11EC C2F111 JP NZ,START5
|
||
11EF F610 OR ZSTATB ;INDICATE NO STATUS LINE
|
||
11F1 77 START5: LD (HL),A
|
||
; JP MLOOP ;COMMENTED OUT FOR FALL THROUGH
|
||
;
|
||
; **********************************************************************
|
||
; * *
|
||
; * MAINLOOP *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
;
|
||
;MAIN LOOP, READ AN INSTRUCTION AND ITS ARGS, THEN DISPATCH
|
||
|
||
11F2 AF MLOOP: XOR A
|
||
11F3 32A521 LD (ARGCNT),A ;ZERO ARG COUNT
|
||
11F6 CD3C1D CALL NEXTPC ;GET NEXT OPCODE IN A
|
||
11F9 32A621 LD (OPCODE),A ;SAVE IT
|
||
11FC FE80 CP 128
|
||
11FE DA9812 JP C,OP2 ;2-OP
|
||
1201 FEB0 CP 176
|
||
1203 DA6F12 JP C,OP1 ;1-OP
|
||
1206 FEC0 CP 192
|
||
1208 DA6212 JP C,OP0 ;0-OP
|
||
;
|
||
; HANDLE AN X-OP
|
||
;
|
||
120B CD3C1D OPEXT: CALL NEXTPC ;GET VAR TYPES, THIS IS AN EXT OP
|
||
120E 119D21 LD DE,ARG1
|
||
1211 0604 LD B,4 ;MAX NUMBER OF ARGS
|
||
1213 4F LD C,A
|
||
1214 C5 OPEXTL: PUSH BC
|
||
1215 D5 PUSH DE
|
||
1216 79 LD A,C
|
||
1217 E6C0 AND 0C0H ;ISOLATE BIT7, BIT6 TO DETERMINE ARG TYPE
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 33
|
||
|
||
|
||
1219 CCCF12 CALL Z,GETLNG ;00=LONG IMMEDIATE
|
||
121C FE80 CP 80H
|
||
121E CCDC12 CALL Z,GETVAR ;10=VARIABLE
|
||
1221 FE40 CP 40H
|
||
1223 CCC612 CALL Z,GETSHT ;01=SHORT IMMEDIATE
|
||
1226 D1 POP DE
|
||
1227 C1 POP BC
|
||
1228 FEC0 CP 0C0H ;11=NO MORE VARIABLES
|
||
122A CA3F12 JP Z,OPEXTF ;ALL DONE?
|
||
122D EB EX DE,HL ;NO. STORE VALUE
|
||
122E 73 LD (HL),E
|
||
122F 23 INC HL
|
||
1230 72 LD (HL),D
|
||
1231 23 INC HL
|
||
1232 EB EX DE,HL ;POINTER BACK IN DE
|
||
1233 21A521 LD HL,ARGCNT
|
||
1236 34 INC (HL) ;ONE MORE ARG
|
||
1237 79 LD A,C
|
||
1238 07 RLCA
|
||
1239 07 RLCA ;GET TO NEXT ARG TYPE
|
||
123A 4F LD C,A
|
||
123B 05 DEC B ;DECREMENT ARG COUNT
|
||
123C C21412 JP NZ,OPEXTL ;LOOP FOR MORE
|
||
;
|
||
; DISPATCH THE X-OP
|
||
;
|
||
123F 214414 OPEXTF: LD HL,OPEXTT ;COMPUTE DISPATCH POINTER
|
||
1242 3AA621 LD A,(OPCODE) ;RETRIEVE THE OPCODE
|
||
1245 FEE0 CP 224 ;IS IT AN EXTENDED 2-OP?
|
||
1247 DAB912 JP C,OP2EX ; YES.
|
||
124A D6E0 SUB 224 ; NO.
|
||
124C FE0A CP OPEXTM ;IS IT A LEGAL X-OP?
|
||
124E D2A115 JP NC,BADOP ; NO.
|
||
;
|
||
; GENERALIZED DISPATCH
|
||
;
|
||
1251 OPDSPH:
|
||
1251 87 ADD A,A ;FORM A WORD OFFSET (*2)
|
||
1252 4F LD C,A ;PUT OFFSET INTO BC
|
||
1253 0600 LD B,0
|
||
1255 09 ADD HL,BC ;ADD OFFSET TO DISPATCH POINTER
|
||
1256 5E LD E,(HL) ;ADDRESS LSB
|
||
1257 23 INC HL
|
||
1258 56 LD D,(HL) ;ADDRESS MSB
|
||
1259 2A9D21 LD HL,(ARG1) ;FIRST ARG
|
||
125C EB EX DE,HL ;HL ^ TABLE ADDRESS OF ROUTINE
|
||
; DE <= FIRST ARG
|
||
125D 3AA521 LD A,(ARGCNT) ;B <= ARG COUNT
|
||
1260 47 LD B,A
|
||
1261 E9 JP (HL) ;GO TO IT
|
||
;
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 34
|
||
|
||
|
||
; HANDLE A 0-OP
|
||
;
|
||
1262 D6B0 OP0: SUB 176 ;ADJUST VALUE
|
||
1264 FE0E CP OP0M ;IS IT A LEGAL 0-OP?
|
||
1266 D2A115 JP NC,BADOP ; NO.
|
||
1269 21D613 LD HL,OP0T ; YES. HL ^ 0-OP TABLE
|
||
126C C35112 JP OPDSPH ;DISPATCH IT
|
||
;
|
||
; HANDLE A 1-OP
|
||
;
|
||
126F E630 OP1: AND 30H ;1 OP, ISOLATE BITS 5,4
|
||
1271 CCCF12 CALL Z,GETLNG ;00=LONG IMMEDIATE
|
||
1274 FE10 CP 10H
|
||
1276 CCC612 CALL Z,GETSHT ;01=SHORT IMMEDIATE
|
||
1279 FE20 CP 20H
|
||
127B CCDC12 CALL Z,GETVAR ;10=VARIABLE
|
||
127E 3E01 LD A,1
|
||
1280 32A521 LD (ARGCNT),A ;1 ARG
|
||
1283 229D21 LD (ARG1),HL ;STORE IT
|
||
1286 3AA621 LD A,(OPCODE) ;RESTORE OPCODE
|
||
1289 E6CF AND 0CFH ;(NOT 30H) TURN OFF MODE BITS
|
||
128B D680 SUB 128 ;ADJUST VALUE
|
||
128D FE10 CP OP1M ;LEGAL 1-OP?
|
||
128F D2A115 JP NC,BADOP ; NO.
|
||
1292 21F213 LD HL,OP1T ; YES. HL ^ 1-OP TABLE
|
||
1295 C35112 JP OPDSPH ;DISPATCH IT
|
||
;
|
||
; HANDLE A 2-OP
|
||
;
|
||
1298 E640 OP2: AND 40H ;ISOLATE 1ST. ARG BIT
|
||
129A C4DC12 CALL NZ,GETVAR ;1=VARIABLE
|
||
129D CCC612 CALL Z,GETSHT ;0=SHORT IMMEDIATE
|
||
12A0 229D21 LD (ARG1),HL ;STORE ARG1
|
||
12A3 3AA621 LD A,(OPCODE) ;RESTORE OPCODE
|
||
12A6 E620 AND 20H ;ISOLATE 2ND. ARG BIT
|
||
12A8 C4DC12 CALL NZ,GETVAR ;1=VARIABLE
|
||
12AB CCC612 CALL Z,GETSHT ;2=SHORT IMMEDIATE
|
||
12AE 229F21 LD (ARG2),HL ;STORE ARG 2
|
||
12B1 3E02 LD A,2
|
||
12B3 32A521 LD (ARGCNT),A ;TWO ARGS
|
||
12B6 3AA621 LD A,(OPCODE) ;RESTORE OPCODE
|
||
12B9 E61F OP2EX: AND 1FH ;(NOT 0E0H) TURN OFF MODE BITS
|
||
12BB FE19 CP OP2M ;LEGAL 2-OP?
|
||
12BD D2A115 JP NC,BADOP ; NO.
|
||
12C0 211214 LD HL,OP2T ; YES. HL ^ 2-OP TABLE
|
||
12C3 C35112 JP OPDSPH ;DISPATCH IT
|
||
;
|
||
;*************************************
|
||
;* OPCODE ARGUMENT FETCH SUBROUTINES *
|
||
;*************************************
|
||
;
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 35
|
||
|
||
|
||
; -----------------------
|
||
; FETCH A SHORT IMMEDIATE
|
||
; -----------------------
|
||
12C6 F5 GETSHT: PUSH AF ;SAVE OPCODE
|
||
12C7 CD3C1D CALL NEXTPC ;GET NEXT ZBYTE
|
||
12CA 6F LD L,A ;MAKING IT THE LSB OF ARGUMENT
|
||
12CB 2600 LD H,0 ;MSB IS 0
|
||
12CD F1 POP AF ;RESTORE OPCODE
|
||
12CE C9 RET
|
||
; ----------------------
|
||
; FETCH A LONG IMMEDIATE
|
||
; ----------------------
|
||
12CF F5 GETLNG: PUSH AF ;SAVE OPCODE
|
||
12D0 CD3C1D CALL NEXTPC ;GET NEXT ZBYTE
|
||
12D3 67 LD H,A ;MAKING IT THE MSB OF ARGUMENT
|
||
12D4 E5 PUSH HL ;SAVE IT ON THE STACK
|
||
12D5 CD3C1D CALL NEXTPC ;GET NEXT ZBYTE
|
||
12D8 E1 POP HL ;RESTORE MSB OF ARGUMENT
|
||
12D9 6F LD L,A ;AND FILL IN LSB OF ARGUMENT
|
||
12DA F1 POP AF ;RESTORE OPCODE
|
||
12DB C9 RET
|
||
; ----------------
|
||
; FETCH A VARIABLE
|
||
; ----------------
|
||
12DC F5 GETVAR: PUSH AF ;GET VAR, FIRST FIND TYPE
|
||
12DD CD3C1D CALL NEXTPC
|
||
12E0 B7 OR A
|
||
12E1 CA0413 JP Z,GETVRS ;FROM STACK
|
||
12E4 FE10 GETVR1: CP 16
|
||
12E6 D2F812 JP NC,GETVRG ;GLOBAL
|
||
12E9 3D GETVRL: DEC A ;LOCAL
|
||
12EA 87 ADD A,A
|
||
12EB 5F LD E,A
|
||
12EC 1600 LD D,0
|
||
12EE 216921 LD HL,LOCALS
|
||
12F1 19 GETVL1: ADD HL,DE ;POINTER TO VARIABLE
|
||
12F2 56 LD D,(HL)
|
||
12F3 23 INC HL
|
||
12F4 5E LD E,(HL)
|
||
12F5 EB EX DE,HL ;RETURN VALUE IN HL
|
||
12F6 F1 POP AF
|
||
12F7 C9 RET
|
||
;
|
||
12F8 D610 GETVRG: SUB 16
|
||
12FA 5F LD E,A ;GET GLOBAL
|
||
12FB 1600 LD D,0
|
||
12FD 2AA721 LD HL,(GLOBAL)
|
||
1300 19 ADD HL,DE ;PRE ADD SO IT GETS DONE TWICE
|
||
1301 C3F112 JP GETVL1
|
||
;
|
||
1304 CD271D GETVRS: CALL POPSTK ;VAR FROM STACK
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 36
|
||
|
||
|
||
1307 F1 POP AF
|
||
1308 C9 RET
|
||
;
|
||
;*********************
|
||
;* MISC. SUBROUTINES *
|
||
;*********************
|
||
1309 AF RET0: XOR A ;RETURN 0
|
||
130A 6F PUTBYT: LD L,A
|
||
130B 2600 LD H,0
|
||
130D CD1313 PUTVAL: CALL PUTVLC ;STORE VALUE
|
||
1310 C3F211 JP MLOOP
|
||
;
|
||
1313 E5 PUTVLC: PUSH HL ;SAVE VALUE
|
||
1314 CD3C1D CALL NEXTPC ;GET TYPE
|
||
1317 E1 POP HL
|
||
1318 B7 PUTVR1: OR A
|
||
1319 CA0E1D JP Z,PSHSTK ;SAVE ON STACK AND RETURN
|
||
131C EB EX DE,HL ;VALUE IN DE
|
||
131D FE10 CP 16
|
||
131F D22F13 JP NC,PUTVLG ;GLOBAL
|
||
1322 3D PUTVLL: DEC A ;LOCAL
|
||
1323 87 ADD A,A
|
||
1324 4F LD C,A
|
||
1325 0600 LD B,0
|
||
1327 216921 LD HL,LOCALS
|
||
132A 09 PUTVL1: ADD HL,BC ;COMPUTE ADDRESS
|
||
132B 72 LD (HL),D
|
||
132C 23 INC HL
|
||
132D 73 LD (HL),E
|
||
132E C9 RET
|
||
;
|
||
132F D610 PUTVLG: SUB 16
|
||
1331 4F LD C,A ;STORE GLOBAL
|
||
1332 0600 LD B,0
|
||
1334 2AA721 LD HL,(GLOBAL) ;GLOBAL POINTER
|
||
1337 09 ADD HL,BC ;PRE ADD
|
||
1338 C32A13 JP PUTVL1
|
||
;
|
||
;*********************
|
||
;* DATA MANIPULATION *
|
||
;*********************
|
||
;
|
||
; -----------------
|
||
; RECALL A VARIABLE
|
||
; -----------------
|
||
133B F5 VARGET: PUSH AF ;SAVE OPCODE
|
||
133C B7 OR A ;IF NON-ZERO
|
||
133D C2E412 JP NZ,GETVR1 ; THEN GET A VARIABLE FROM LOCAL OR GLOBAL TABLE
|
||
; ELSE TAKE VAR OFF STACK
|
||
1340 F1 VARGTS: POP AF ;RESTORE OPCODE
|
||
1341 CD271D CALL POPSTK ;POP A WORD FROM ZSTACK
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 37
|
||
|
||
|
||
1344 C30E1D JP PSHSTK ;PUT IT BACK AND RETURN THE VALUE IN HL
|
||
; ----------------
|
||
; STORE A VARIABLE
|
||
; ----------------
|
||
1347 B7 VARPUT: OR A ;IF NON-ZERO
|
||
1348 C21813 JP NZ,PUTVR1 ; THEN PUT A VARIABLE IN LOCAL OR GLOBAL TABLE
|
||
; ELSE REPLACE A WORD ON Z-STACK
|
||
134B E5 VARPTS: PUSH HL ;SAVE NEW VALUE
|
||
134C CD271D CALL POPSTK ;POP OLD WORD OFF Z-STACK
|
||
134F E1 POP HL ;RESTORE NEW VALUE
|
||
1350 C30E1D JP PSHSTK ;AND PUSH IT ON TOP OF ZSTACK
|
||
;
|
||
;************************
|
||
;* PREDICATE PROCESSING *
|
||
;************************
|
||
;
|
||
; ---------------
|
||
; PREDICATE FAILS
|
||
; ---------------
|
||
1353 CD3C1D PREDF: CALL NEXTPC ;FETCH NEXT BYTE OF ZCODE
|
||
1356 B7 OR A
|
||
1357 F26913 JP P,PREDB ;BRANCH IF < 128
|
||
135A E640 PREDNB: AND 40H ;CHECK FOR MULTI BYTE HACK
|
||
135C CC3C1D CALL Z,NEXTPC ;GET NEXT BYTE IF SO
|
||
135F C3F211 JP MLOOP ;CONTINUE IN SEQUENCE
|
||
; ------------------
|
||
; PREDICATE SUCCEEDS
|
||
; ------------------
|
||
1362 CD3C1D PREDS: CALL NEXTPC ;FETCH NEXT BYTE OF ZCODE
|
||
1365 B7 OR A ;IF BIT 7 IS NOT SET
|
||
1366 F25A13 JP P,PREDNB ;BRANCH ON PREDICATE FAILURE
|
||
; ELSE FALL THROUGH TO PREDB
|
||
; ----------------
|
||
; PERFORM A BRANCH
|
||
; ----------------
|
||
1369 47 PREDB: LD B,A ;SAVE OPCODE
|
||
136A E640 AND 40H ;LONG BRANCH?
|
||
136C CA7813 JP Z,PREDLB ; YES. (BIT 6 WAS OFF)
|
||
; NO. SHORT BRANCH
|
||
136F 78 LD A,B ;RESTORE OPCODE
|
||
1370 E63F AND 3FH ;FORM SHORT OFFSET
|
||
1372 4F LD C,A ;USE AS LSB OF BRANCH OFFSET
|
||
1373 0600 LD B,0 ;ZERO MSB OF OFFSET
|
||
1375 C38C13 JP PREDB1 ;SIMULATE LONG BRANCH TO A CLOSE PLACE
|
||
;
|
||
; HANDLE A LONG BRANCH
|
||
1378 78 PREDLB: LD A,B ;RESTORE OPCODE
|
||
1379 E63F AND 3FH ;FORM MSB OF OFFSET
|
||
137B 47 LD B,A ;B <= MSB OF OFFSET
|
||
137C C5 PUSH BC
|
||
137D CD3C1D CALL NEXTPC ;GET SECOND BYTE
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 38
|
||
|
||
|
||
1380 C1 POP BC
|
||
1381 4F LD C,A ;C <= LSB OF OFFSET
|
||
1382 78 LD A,B ;A <= MSB OF OFFSET
|
||
1383 E620 AND 20H ;CHECK SIGN OF 14 BIT VALUE
|
||
1385 CA8C13 JP Z,PREDB1 ;POSITIVE
|
||
1388 78 LD A,B ;ELSE EXTEND THE SIGN (A <= MSB)
|
||
1389 F6C0 OR 0C0H ;AND MAKE THE FULL WORD NEG
|
||
138B 47 LD B,A ;SAVE THE RESULT IN B
|
||
;
|
||
; BRANCH TO THE Z-ADDRESS AT $(ZPC) + OFFSET (IN BC)
|
||
; (ZPC RELATIVE ADDRESSING)
|
||
138C 78 PREDB1: LD A,B
|
||
138D B1 OR C ;IS OFFSET=0?
|
||
138E CA6114 JP Z,RFALSE ; YES. DO AN RFALSE
|
||
1391 0B DEC BC
|
||
1392 78 LD A,B
|
||
1393 B1 OR C ;WAS OFFSET=1
|
||
1394 CA5814 JP Z,RTRUE ; YES. DO AN RTRUE
|
||
1397 0B PREDB3: DEC BC ;2 NOW SUBTRACTED FROM JUMP ADDRESS
|
||
1398 60 LD H,B ;HL <= JUMP ADDRESS
|
||
1399 69 LD L,C
|
||
139A 22AC21 LD (ZPCOFF),HL ;ZPCOFF <= JUMP ADDRESS
|
||
139D 2A8821 LD HL,(ZPCL) ;HL <= LOW ORDER 9 BITS OF ZIP PROGRAM COUNTER
|
||
13A0 59 LD E,C ;E <= LSB OF JUMP ADDRESS
|
||
13A1 78 LD A,B ;A <= MSB OF JUMP ADDRESS
|
||
13A2 E601 AND 1
|
||
13A4 57 LD D,A ;ZPCL ADDER
|
||
13A5 78 LD A,B ;ARITHMETICALLY SHIFT B RIGHT 1
|
||
13A6 07 RLCA ;FIRST SET CARRY
|
||
13A7 78 LD A,B
|
||
13A8 1F RRA
|
||
13A9 47 LD B,A ;CUTE
|
||
13AA 19 ADD HL,DE
|
||
13AB 7C LD A,H
|
||
13AC E602 AND 2
|
||
13AE CAB413 JP Z,PREDB2 ;NO OVERFLOW
|
||
13B1 25 DEC H
|
||
13B2 25 DEC H ;OVERFLOW
|
||
13B3 04 INC B
|
||
13B4 228821 PREDB2: LD (ZPCL),HL ;STORE LOW BYTES
|
||
13B7 218721 LD HL,ZPCH ;MODIFY UPPER
|
||
13BA 78 LD A,B
|
||
13BB B7 OR A
|
||
13BC CAC813 JP Z,PREDB4 ;NO CHANGE IN PACE, DO FASTER JUMP
|
||
13BF 86 ADD A,(HL)
|
||
13C0 77 LD (HL),A
|
||
13C1 AF XOR A
|
||
13C2 32B021 LD (ZPCFLG),A ;CHANGED PAGES
|
||
13C5 C3F211 JP MLOOP ;FINISHED
|
||
;
|
||
13C8 2AAE21 PREDB4: LD HL,(ZPCPNT)
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 39
|
||
|
||
|
||
13CB EB EX DE,HL
|
||
13CC 2AAC21 LD HL,(ZPCOFF)
|
||
13CF 19 ADD HL,DE ;CALCULATE NEW PC POINTER
|
||
13D0 22AE21 LD (ZPCPNT),HL
|
||
13D3 C3F211 JP MLOOP
|
||
;
|
||
; **********************************************************************
|
||
; * *
|
||
; * OPCODE PROCESSING SECTION *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
; ****************************
|
||
; * DISPATCH TABLES *
|
||
; ****************************
|
||
;
|
||
; -----
|
||
; 0-OPS
|
||
; -----
|
||
13D6 5814 OP0T: DW RTRUE ;0
|
||
13D8 6114 DW RFALSE ;1
|
||
13DA 6714 DW PRINTI ;2
|
||
13DC 9914 DW PRINTR ;3
|
||
13DE A214 DW ZNOP ;4
|
||
13E0 A514 DW ZSAVE ;5
|
||
13E2 A814 DW ZRSTOR ;6
|
||
13E4 AB14 DW ZRSTAR ;7
|
||
13E6 AE14 DW RSTACK ;8
|
||
13E8 B714 DW FSTACK ;9
|
||
13EA BD14 DW ZQUIT ;10
|
||
13EC C014 DW CRLF ;11
|
||
13EE C614 DW USL ;12
|
||
13F0 CC14 DW VERIFY ;13
|
||
000E OP0M EQU ($-OP0T)/2 ;NUMBER OF 0-OPS
|
||
;
|
||
; -----
|
||
; 1-OPS
|
||
; -----
|
||
13F2 2415 OP1T: DW ZEROQ ;0
|
||
13F4 2F15 DW NEXTQ ;1
|
||
13F6 3B15 DW FIRSTQ ;2
|
||
13F8 5515 DW LOC ;3
|
||
13FA 6515 DW PTSIZE ;4
|
||
13FC 7515 DW INC ;5
|
||
13FE 7B15 DW DEC ;6
|
||
1400 9815 DW PRINTB ;7
|
||
1402 A115 DW BADOP ;8 (UNDEFINED)
|
||
1404 A415 DW REMOVE ;9
|
||
1406 FA15 DW PRINTD ;10
|
||
1408 1516 DW RETURN ;11
|
||
140A 6016 DW JUMP ;12
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 40
|
||
|
||
|
||
140C 6916 DW PRINT ;13
|
||
140E 7516 DW VALUE ;14
|
||
1410 7E16 DW BCOM ;15
|
||
0010 OP1M EQU ($-OP1T)/2 ;NUMBER OF 1-OPS
|
||
;
|
||
; -----
|
||
; 2-OPS
|
||
; -----
|
||
1412 A115 OP2T: DW BADOP
|
||
1414 A418 DW EQUALQ
|
||
1416 8A16 DW LESSQ
|
||
1418 9716 DW GRTRQ
|
||
141A A316 DW DLESSQ
|
||
141C AE16 DW IGRTRQ
|
||
141E BE16 DW INQ
|
||
1420 D216 DW BTST
|
||
1422 E416 DW BOR
|
||
1424 F016 DW BAND
|
||
1426 FC16 DW FSETQ
|
||
1428 0B17 DW FSET
|
||
142A 1817 DW FCLEAR
|
||
142C 2717 DW ZSET
|
||
142E 3317 DW MOVE
|
||
1430 5F17 DW GET
|
||
1432 7117 DW GETB
|
||
1434 8517 DW GETP
|
||
1436 D117 DW GETPT
|
||
1438 F617 DW NEXTP
|
||
143A 2018 DW ZADD
|
||
143C 2718 DW ZSUB
|
||
143E 3318 DW MUL
|
||
1440 5F18 DW DIV
|
||
1442 9618 DW ZMOD
|
||
0019 OP2M EQU ($-OP2T)/2
|
||
;
|
||
; -----
|
||
; X-OPS
|
||
; -----
|
||
1444 D118 OPEXTT: DW ZCALL
|
||
1446 5D19 DW PUT
|
||
1448 7619 DW PUTB
|
||
144A 8A19 DW PUTP
|
||
144C BC19 DW ZREAD
|
||
144E 661B DW PRINTC
|
||
1450 701B DW PRINTN
|
||
1452 AF1B DW RANDOM
|
||
1454 BE1B DW ZPUSH
|
||
1456 C71B DW ZPOP
|
||
000A OPEXTM EQU ($-OPEXTT)/2
|
||
; **********************************************************************
|
||
; * *
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 41
|
||
|
||
|
||
; * ZCODE EXECUTION ROUTINES *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
; *******************
|
||
; * 0-OPS *
|
||
; *******************
|
||
;
|
||
;
|
||
; ----------
|
||
; RTRUE [0]
|
||
; ----------
|
||
; SIMULATE A RETURN 1
|
||
1458 210100 RTRUE: LD HL,1
|
||
145B 229D21 RTRUE1: LD (ARG1),HL
|
||
145E C31516 JP RETURN
|
||
;
|
||
; -----------
|
||
; RFALSE [1]
|
||
; -----------
|
||
; SIMULATE A RETURN 0
|
||
1461 210000 RFALSE: LD HL,0
|
||
1464 C35B14 JP RTRUE1
|
||
;
|
||
; -----------
|
||
; PRINTI [2]
|
||
; -----------
|
||
; PRINT THE Z-STRING IMMEDIATELY FOLLOWING THE OPCODE
|
||
1467 CD6D14 PRINTI: CALL PRNTI1
|
||
146A C3F211 JP MLOOP
|
||
;
|
||
146D 2A8821 PRNTI1: LD HL,(ZPCL)
|
||
1470 22B321 LD (MPCL),HL ;SET UP MPC TO EQUAL ZPC
|
||
1473 3A8721 LD A,(ZPCH)
|
||
1476 32B221 LD (MPCH),A
|
||
1479 AF XOR A
|
||
147A 32B721 LD (MPCFLG),A ;ZERO MPC FLAG
|
||
147D CD0B1F CALL PZSTR ;PRINT THE STRING
|
||
1480 2AB321 LD HL,(MPCL) ;NOW CHANGE BACK ZPC TO END OF STRING
|
||
1483 228821 LD (ZPCL),HL
|
||
1486 3AB221 LD A,(MPCH)
|
||
1489 328721 LD (ZPCH),A
|
||
148C 3AB721 LD A,(MPCFLG)
|
||
148F 32B021 LD (ZPCFLG),A ;UPDATE FLAG
|
||
1492 2AB521 LD HL,(MPCPNT)
|
||
1495 22AE21 LD (ZPCPNT),HL ;AND PAGE POINTER
|
||
1498 C9 RET
|
||
;
|
||
; -----------
|
||
; PRINTR [3]
|
||
; -----------
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 42
|
||
|
||
|
||
; EXECUTE A PRINTI, FOLLOWED BY A CRLF, AND A RTRUE
|
||
1499 CD6D14 PRINTR: CALL PRNTI1
|
||
149C CDB404 CALL PCRLF
|
||
149F C35814 JP RTRUE
|
||
;
|
||
; ---------
|
||
; ZNOP [4]
|
||
; ---------
|
||
; EXECUTE A NOP
|
||
14A2 C3F211 ZNOP: JP MLOOP
|
||
;
|
||
; ----------
|
||
; ZSAVE [5]
|
||
; ----------
|
||
; SAVE GAME
|
||
14A5 C36807 ZSAVE: JP SAVE ;MACHINE DEPENDENT
|
||
;
|
||
; -----------
|
||
; ZRSTOR [6]
|
||
; -----------
|
||
; RESTORE SAVED GAME
|
||
14A8 C3750A ZRSTOR: JP RESTOR ;MACHINE DEPENDENT
|
||
;
|
||
; -----------
|
||
; ZRSTAR [7]
|
||
; -----------
|
||
; RESTART GAME
|
||
14AB C35707 ZRSTAR: JP RESTAR ;MACHINE DEPENDENT
|
||
;
|
||
; -----------
|
||
; RSTACK [8]
|
||
; -----------
|
||
; EXECUTE A RETURN WITH CALL VALUE ON TOP OF THE STACK
|
||
14AE CD271D RSTACK: CALL POPSTK
|
||
14B1 229D21 LD (ARG1),HL
|
||
14B4 C31516 JP RETURN
|
||
;
|
||
; -----------
|
||
; FSTACK [9]
|
||
; -----------
|
||
14B7 CD271D FSTACK: CALL POPSTK
|
||
14BA C3F211 JP MLOOP
|
||
;
|
||
; -----------
|
||
; ZQUIT [10]
|
||
; -----------
|
||
14BD C34907 ZQUIT: JP QUIT ;MACHINE DEPENDENT
|
||
;
|
||
; ----------
|
||
; CRLF [11]
|
||
; ----------
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 43
|
||
|
||
|
||
; PRINT CARRIAGE RETURN/LINE FEED
|
||
14C0 CDB404 CRLF: CALL PCRLF
|
||
14C3 C3F211 JP MLOOP
|
||
;
|
||
; ---------
|
||
; USL [12]
|
||
; ---------
|
||
; UPDATE STATUS LINE
|
||
14C6 CDC105 USL: CALL WHOLIN
|
||
14C9 C3F211 JP MLOOP
|
||
;
|
||
; ------------
|
||
; VERIFY [13]
|
||
; ------------
|
||
; VERIFY THE GAME CODE
|
||
14CC 3E01 VERIFY: LD A,1 ;SELF CHECK
|
||
14CE 329A21 LD (VERF),A ;IN VERIFY MODE, ALWAYS GET NEW PAGE
|
||
14D1 216B10 LD HL,VRS
|
||
14D4 CD480A CALL MSGOUT ;OUTPUT LAST UPDATE
|
||
14D7 217C10 LD HL,VRLINE
|
||
14DA CD480A CALL MSGOUT ;OUTPUT VERSION
|
||
14DD 2ABB21 LD HL,(ZCODEP) ;^ TOP OF ZCODE
|
||
14E0 111A00 LD DE,ZCKLEN
|
||
14E3 19 ADD HL,DE
|
||
14E4 56 LD D,(HL)
|
||
14E5 23 INC HL
|
||
14E6 5E LD E,(HL)
|
||
14E7 21E0FF LD HL,-32
|
||
14EA 19 ADD HL,DE
|
||
14EB EB EX DE,HL ;DE HAVE COUNT
|
||
14EC 010000 LD BC,0 ;SUM IN BC
|
||
14EF 214000 LD HL,32*2
|
||
14F2 CDC61D CALL SETWRD
|
||
14F5 C5 VERIFL: PUSH BC
|
||
14F6 D5 PUSH DE
|
||
14F7 CD071E CALL GETWRD ;GUARENTEED TO GET FRESH WORD
|
||
14FA D1 POP DE
|
||
14FB C1 POP BC
|
||
14FC 7C LD A,H
|
||
14FD 2600 LD H,0
|
||
14FF 09 ADD HL,BC
|
||
1500 CDEA1E CALL HLOFF
|
||
1503 44 LD B,H
|
||
1504 4D LD C,L ;TOTAL IN BC
|
||
1505 1B DEC DE
|
||
1506 7A LD A,D
|
||
1507 B3 OR E
|
||
1508 C2F514 JP NZ,VERIFL ;SUM ALL BYTES
|
||
150B 111C00 LD DE,ZCKSUM
|
||
150E 2ABB21 LD HL,(ZCODEP)
|
||
1511 19 ADD HL,DE
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 44
|
||
|
||
|
||
1512 56 LD D,(HL)
|
||
1513 23 INC HL
|
||
1514 5E LD E,(HL) ;GET CHECKSUM
|
||
1515 60 LD H,B
|
||
1516 69 LD L,C
|
||
1517 AF XOR A
|
||
1518 329A21 LD (VERF),A
|
||
151B CD071D CALL HLGEDE ;COMPARE CALCULATED WITH ACTUAL
|
||
151E CA6213 JP Z,PREDS
|
||
1521 C35313 JP PREDF ;FAIL IF DIFFERENT
|
||
;
|
||
; *******************
|
||
; * 1-OPS *
|
||
; *******************
|
||
;
|
||
; ----------
|
||
; ZERO? [0]
|
||
; ----------
|
||
; IS ARG1 EQUAL TO ZERO? [PRED]
|
||
1524 2A9D21 ZEROQ: LD HL,(ARG1)
|
||
1527 7C LD A,H
|
||
1528 B5 OR L
|
||
1529 CA6213 JP Z,PREDS
|
||
152C C35313 JP PREDF
|
||
;
|
||
; ----------
|
||
; NEXT? [1]
|
||
; ----------
|
||
; RETURN THE NEXT POINTER IN OBJRCT "ARG1"; FAIL IF
|
||
; NONE LEFT, AND RETURN ZERO [VALUE][PRED]
|
||
152F 3A9D21 NEXTQ: LD A,(ARG1)
|
||
1532 CDD61C CALL OBJLOC
|
||
1535 110500 LD DE,5
|
||
1538 C34415 JP FRSTQ1 ;SAME AS FIRST?
|
||
;
|
||
; -----------
|
||
; FIRST? [2]
|
||
; -----------
|
||
; RETURN THE FIRST POINTER IN OBJECT "ARG1"; FAIL IF
|
||
; NONE, AND RETURN ZERO [VALUE][PRED]
|
||
;
|
||
153B 3A9D21 FIRSTQ: LD A,(ARG1)
|
||
153E CDD61C CALL OBJLOC
|
||
1541 110600 LD DE,6
|
||
1544 19 FRSTQ1: ADD HL,DE
|
||
1545 7E LD A,(HL)
|
||
1546 F5 PUSH AF ;SAVE VALUE
|
||
1547 6F LD L,A
|
||
1548 2600 LD H,0
|
||
154A CD1313 CALL PUTVLC ;STORE VALUE
|
||
154D F1 POP AF
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 45
|
||
|
||
|
||
154E B7 OR A
|
||
154F C26213 JP NZ,PREDS ;FOUND FIRST
|
||
1552 C35313 JP PREDF ;FIRST NOT FOUND
|
||
;
|
||
; --------
|
||
; LOC [3]
|
||
; --------
|
||
; RETURN THE OBJECT CONTAINING OBJECT "ARG1"; ZERO IF NONE [VALUE]
|
||
1555 3A9D21 LOC: LD A,(ARG1)
|
||
1558 CDD61C CALL OBJLOC
|
||
155B 110400 LD DE,4
|
||
155E 19 ADD HL,DE
|
||
155F 6E LD L,(HL)
|
||
1560 2600 LD H,0
|
||
1562 C30D13 JP PUTVAL
|
||
;
|
||
; -----------
|
||
; PTSIZE [4]
|
||
; -----------
|
||
; RETURN LENGTH OF PROP TABLE "ARG1" IN BYTES [VALUE]
|
||
1565 2A9D21 PTSIZE: LD HL,(ARG1)
|
||
1568 EB EX DE,HL
|
||
1569 2ABB21 LD HL,(ZCODEP)
|
||
156C 19 ADD HL,DE ;POINTER TO PROP ENTRY
|
||
156D 2B DEC HL
|
||
156E CDC71C CALL PROPL
|
||
1571 3C INC A
|
||
1572 C30A13 JP PUTBYT
|
||
;
|
||
; --------
|
||
; INC [5]
|
||
; --------
|
||
; INCREMENT ARG1 [VALUE]
|
||
1575 CD8115 INC: CALL INC1
|
||
1578 C3F211 JP MLOOP
|
||
;
|
||
; --------
|
||
; DEC [6]
|
||
; --------
|
||
; DECREMENT ARG1 [VALUE]
|
||
157B CD8E15 DEC: CALL DEC1
|
||
157E C3F211 JP MLOOP
|
||
;
|
||
1581 3A9D21 INC1: LD A,(ARG1)
|
||
1584 CD3B13 CALL VARGET
|
||
1587 23 INC HL
|
||
1588 E5 INC2: PUSH HL
|
||
1589 CD4713 CALL VARPUT
|
||
158C E1 POP HL
|
||
158D C9 RET
|
||
;
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 46
|
||
|
||
|
||
158E 3A9D21 DEC1: LD A,(ARG1)
|
||
1591 CD3B13 CALL VARGET
|
||
1594 2B DEC HL
|
||
1595 C38815 JP INC2
|
||
;
|
||
; -----------
|
||
; PRINTB [7]
|
||
; -----------
|
||
; PRINT THE STRING POINTED TO BY BYTE POINTER ARG1
|
||
1598 2A9D21 PRINTB: LD HL,(ARG1)
|
||
159B CDC61D PRINT2: CALL SETWRD
|
||
159E C36F16 JP PRINT1
|
||
;
|
||
; ----------
|
||
; BADOP [8]
|
||
; ----------
|
||
15A1 C3F211 BADOP: JP MLOOP
|
||
;
|
||
; -----------
|
||
; REMOVE [9]
|
||
; -----------
|
||
; MOVE OBJECT [ARG1] TO PSEUDO-OBJECT #0
|
||
15A4 CDAA15 REMOVE: CALL REMOVC
|
||
15A7 C3F211 JP MLOOP
|
||
;
|
||
15AA 3A9D21 REMOVC: LD A,(ARG1)
|
||
15AD 47 LD B,A ;SAVE IT
|
||
15AE CDD61C CALL OBJLOC
|
||
15B1 EB EX DE,HL ;SAVE IN DE
|
||
15B2 210400 LD HL,4
|
||
15B5 19 ADD HL,DE
|
||
15B6 7E LD A,(HL)
|
||
15B7 B7 OR A
|
||
15B8 C8 RET Z ;NO OBJECT
|
||
15B9 D5 PUSH DE ;SAVE VALUE
|
||
15BA CDD61C CALL OBJLOC ;PARENT OBJECT
|
||
15BD 110600 LD DE,6
|
||
15C0 EB EX DE,HL ;LP IN D
|
||
15C1 19 ADD HL,DE
|
||
15C2 4E LD C,(HL) ;SIBL
|
||
15C3 78 LD A,B
|
||
15C4 B9 CP C
|
||
15C5 C2D715 JP NZ,REMVC1 ;NOT SAME
|
||
15C8 E1 POP HL
|
||
15C9 E5 PUSH HL ;L1
|
||
15CA 010500 LD BC,5
|
||
15CD 09 ADD HL,BC
|
||
15CE 7E LD A,(HL)
|
||
15CF 210600 LD HL,6 ;PARENT'S FIRST SLOT GETS LOC SLOT
|
||
15D2 19 ADD HL,DE
|
||
15D3 77 LD (HL),A
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 47
|
||
|
||
|
||
15D4 C3EF15 JP REMVC2
|
||
|
||
15D7 79 REMVC1: LD A,C ;GET SIBL
|
||
15D8 CDD61C CALL OBJLOC
|
||
15DB 110500 LD DE,5
|
||
15DE 19 ADD HL,DE
|
||
15DF 54 LD D,H
|
||
15E0 5D LD E,L ;SAVE LS+5
|
||
15E1 4E LD C,(HL) ;NEW SIBL
|
||
15E2 78 LD A,B
|
||
15E3 B9 CP C
|
||
15E4 C2D715 JP NZ,REMVC1 ;NOT END OF CHAIN
|
||
15E7 010500 LD BC,5
|
||
15EA E1 POP HL
|
||
15EB E5 PUSH HL
|
||
15EC 09 ADD HL,BC ;OLD NEXT
|
||
15ED 7E LD A,(HL)
|
||
15EE 12 LD (DE),A
|
||
15EF E1 REMVC2: POP HL
|
||
15F0 110400 LD DE,4
|
||
15F3 19 ADD HL,DE
|
||
15F4 3600 LD (HL),0
|
||
15F6 23 INC HL
|
||
15F7 3600 LD (HL),0
|
||
15F9 C9 RET
|
||
; ------------
|
||
; PRINTD [10]
|
||
; ------------
|
||
; PRINT SHORT DESCRIPTION OF OBJECT [ARG1]
|
||
15FA 3A9D21 PRINTD: LD A,(ARG1)
|
||
15FD CD0316 CALL PRNTDC
|
||
1600 C3F211 JP MLOOP
|
||
;
|
||
1603 CDD61C PRNTDC: CALL OBJLOC
|
||
1606 110700 LD DE,7
|
||
1609 19 ADD HL,DE
|
||
160A 56 LD D,(HL)
|
||
160B 23 INC HL
|
||
160C 5E LD E,(HL)
|
||
160D EB EX DE,HL
|
||
160E 23 INC HL
|
||
160F CDC61D CALL SETWRD
|
||
1612 C30B1F JP PZSTR
|
||
;
|
||
; ------------
|
||
; RETURN [11]
|
||
; ------------
|
||
; RETURN FROM A CALL WITH VALUE ARG1
|
||
1615 2A8B21 RETURN: LD HL,(OZSTKP) ;RESET STACK FROM CALL
|
||
1618 22E90D LD (ZSTAKP),HL
|
||
161B 3A8D21 LD A,(OZSTKC)
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 48
|
||
|
||
|
||
161E 328A21 LD (ZSTAKC),A
|
||
1621 CD271D CALL POPSTK ;RESET Z-STACK
|
||
1624 7D LD A,L
|
||
1625 328721 LD (ZPCH),A ;SAVE UPPER PC
|
||
1628 44 LD B,H ;H HAS NUMBER OF LOCALS
|
||
1629 7C LD A,H
|
||
162A 87 ADD A,A ;WORD
|
||
162B CA4316 JP Z,RET2 ;NO LOCALS
|
||
162E 216721 LD HL,LOCALS-2
|
||
1631 CDEA1E CALL HLOFF ;POSITION HL TO RESTORE LOCALS
|
||
1634 EB RET1: EX DE,HL
|
||
1635 CD271D CALL POPSTK ;GET THE LOCAL, REVERSE ORDER FIRST
|
||
1638 EB EX DE,HL
|
||
1639 72 LD (HL),D
|
||
163A 23 INC HL
|
||
163B 73 LD (HL),E
|
||
163C 2B DEC HL ;NOW BACK UP ONE ELEMENT
|
||
163D 2B DEC HL
|
||
163E 2B DEC HL
|
||
163F 05 DEC B
|
||
1640 C23416 JP NZ,RET1 ;LOOP
|
||
1643 CD271D RET2: CALL POPSTK
|
||
1646 228821 LD (ZPCL),HL ;REST OF PC
|
||
1649 CD271D CALL POPSTK
|
||
164C 228B21 LD (OZSTKP),HL
|
||
164F CD271D CALL POPSTK
|
||
1652 7D LD A,L
|
||
1653 328D21 LD (OZSTKC),A ;RESTORE OLD VALUES
|
||
1656 AF XOR A
|
||
1657 32B021 LD (ZPCFLG),A ;PC CHANGED
|
||
165A 2A9D21 LD HL,(ARG1) ;ARGUMENT TO BE RETURNED
|
||
165D C30D13 JP PUTVAL ;STORE AND RETURN
|
||
;
|
||
; ----------
|
||
; JUMP [12]
|
||
; ----------
|
||
; BRANCH TO Z-LOCATION POINTED TO BY 16-BIT 2'S COMPLIMENT ARG1
|
||
1660 2A9D21 JUMP: LD HL,(ARG1) ;RELATIVE JUMP
|
||
1663 44 LD B,H
|
||
1664 4D LD C,L
|
||
1665 0B DEC BC
|
||
1666 C39713 JP PREDB3 ;TREAT AS A SUCCESSFUL JUMP
|
||
;
|
||
; -----------
|
||
; PRINT [13]
|
||
; -----------
|
||
; PRINT THE Z-STRING POINTED TO BY THE WORD-POINTER ARG1
|
||
1669 2A9D21 PRINT: LD HL,(ARG1) ;TELL SETSTR WHERE THE STRING
|
||
166C CDD81D CALL SETSTR ;RESIDES AND
|
||
166F CD0B1F PRINT1: CALL PZSTR ;PRINT THE STRING
|
||
1672 C3F211 JP MLOOP
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 49
|
||
|
||
|
||
;
|
||
; -----------
|
||
; VALUE [14]
|
||
; -----------
|
||
; RETURN VALUE OF ARG1 [VALUE]
|
||
1675 3A9D21 VALUE: LD A,(ARG1)
|
||
1678 CD3B13 CALL VARGET
|
||
167B C30D13 JP PUTVAL
|
||
;
|
||
; ----------
|
||
; BCOM [15]
|
||
; ----------
|
||
; COMPLIMENT ARG1 [VALUE]
|
||
167E 2A9D21 BCOM: LD HL,(ARG1)
|
||
1681 7C LD A,H
|
||
1682 2F CPL
|
||
1683 67 LD H,A
|
||
1684 7D LD A,L
|
||
1685 2F CPL
|
||
1686 6F LD L,A
|
||
1687 C30D13 JP PUTVAL
|
||
;
|
||
; *******************
|
||
; * 2-OPS *
|
||
; *******************
|
||
;
|
||
; ----------
|
||
; LESS? [0]
|
||
; ----------
|
||
; IS ARG1 LESS THAN ARG2? [PRED]
|
||
168A CDF71C LESSQ: CALL GETARG
|
||
168D EB EX DE,HL
|
||
168E CDFF1C CALL SHLGED
|
||
1691 D26213 JP NC,PREDS
|
||
1694 C35313 JP PREDF
|
||
;
|
||
; ----------
|
||
; GRTR? [1]
|
||
; ----------
|
||
; IS ARG1 GREATER THAN ARG2? [PRED]
|
||
1697 CDF71C GRTRQ: CALL GETARG
|
||
169A CDFF1C CALL SHLGED
|
||
169D D26213 JP NC,PREDS
|
||
16A0 C35313 JP PREDF
|
||
;
|
||
; -----------
|
||
; DLESS? [2]
|
||
; -----------
|
||
; DECREMENT ARG1: SUCCEED IF ARG1 (-1) IS LESS THAN ARG2 [PRED]
|
||
16A3 CD8E15 DLESSQ: CALL DEC1
|
||
16A6 EB EX DE,HL
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 50
|
||
|
||
|
||
16A7 2A9F21 LD HL,(ARG2)
|
||
16AA EB EX DE,HL
|
||
16AB C3B516 JP IGRTQ1
|
||
;
|
||
; -----------
|
||
; IGRTR? [3]
|
||
; -----------
|
||
; INCREMENT ARG1: SUCCEED IF ARG1 (+1) IS GREATER THAN ARG2 [PRED]
|
||
16AE CD8115 IGRTRQ: CALL INC1
|
||
16B1 EB EX DE,HL
|
||
16B2 2A9F21 LD HL,(ARG2)
|
||
16B5 CDFF1C IGRTQ1: CALL SHLGED
|
||
16B8 D26213 JP NC,PREDS
|
||
16BB C35313 JP PREDF
|
||
;
|
||
; ----------
|
||
; IN? [4]
|
||
; ----------
|
||
; IS OBJECT [ARG1] CONTAINED IN OBJECT [ARG2] [PRED]
|
||
16BE 3A9D21 INQ: LD A,(ARG1)
|
||
16C1 CDD61C CALL OBJLOC
|
||
16C4 110400 LD DE,4
|
||
16C7 19 ADD HL,DE
|
||
16C8 3A9F21 LD A,(ARG2)
|
||
16CB BE CP (HL)
|
||
16CC CA6213 JP Z,PREDS ;SUCCESS IF OBJ 2 IN 1
|
||
16CF C35313 JP PREDF
|
||
;
|
||
; ---------
|
||
; BTST [5]
|
||
; ---------
|
||
; IS EVERY "ON" BIT IN ARG1 ALSO "ON" IN ARG2 [PRED]
|
||
16D2 CDF71C BTST: CALL GETARG
|
||
16D5 7C LD A,H
|
||
16D6 A2 AND D
|
||
16D7 57 LD D,A
|
||
16D8 7D LD A,L
|
||
16D9 A3 AND E
|
||
16DA 5F LD E,A
|
||
16DB CD071D CALL HLGEDE
|
||
16DE CA6213 JP Z,PREDS
|
||
16E1 C35313 JP PREDF
|
||
;
|
||
; --------
|
||
; BOR [6]
|
||
; --------
|
||
; RETURN BITWISE OR OF ARG1 AND ARG2 [VALUE]
|
||
16E4 CDF71C BOR: CALL GETARG
|
||
16E7 7A LD A,D
|
||
16E8 B4 OR H
|
||
16E9 67 LD H,A
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 51
|
||
|
||
|
||
16EA 7B LD A,E
|
||
16EB B5 OR L
|
||
16EC 6F LD L,A
|
||
16ED C30D13 JP PUTVAL
|
||
;
|
||
; ---------
|
||
; BAND [7]
|
||
; ---------
|
||
; RETURN BITWISE AND OF ARG1 AND ARG2 [VALUE]
|
||
16F0 CDF71C BAND: CALL GETARG
|
||
16F3 7C LD A,H
|
||
16F4 A2 AND D
|
||
16F5 67 LD H,A
|
||
16F6 7D LD A,L
|
||
16F7 A3 AND E
|
||
16F8 6F LD L,A
|
||
16F9 C30D13 JP PUTVAL
|
||
;
|
||
; ----------
|
||
; FSET? [8]
|
||
; ----------
|
||
; IS FLAG "ARG2" SET IN OBJECT "ARG1"? [PRED]
|
||
16FC CD821C FSETQ: CALL FLAGSU ;GET BIT
|
||
16FF 7A LD A,D
|
||
1700 A0 AND B
|
||
1701 57 LD D,A
|
||
1702 7B LD A,E
|
||
1703 A1 AND C
|
||
1704 B2 OR D ;CHECK FOR ON
|
||
1705 C26213 JP NZ,PREDS ;BIT ON
|
||
1708 C35313 JP PREDF ;BIT OFF
|
||
;
|
||
; ---------
|
||
; FSET [9]
|
||
; ---------
|
||
; SET FLAG "ARG2" IN OBJECT "ARG1"
|
||
170B CD821C FSET: CALL FLAGSU
|
||
170E 7A LD A,D
|
||
170F B0 OR B
|
||
1710 77 LD (HL),A
|
||
1711 23 INC HL
|
||
1712 7B LD A,E
|
||
1713 B1 OR C
|
||
1714 77 LD (HL),A
|
||
1715 C3F211 JP MLOOP
|
||
;
|
||
; ------------
|
||
; FCLEAR [10]
|
||
; ------------
|
||
; CLEAR FLAG "ARG2" IN OBJECT "ARG1"
|
||
1718 CD821C FCLEAR: CALL FLAGSU
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 52
|
||
|
||
|
||
171B 78 LD A,B
|
||
171C 2F CPL
|
||
171D A2 AND D
|
||
171E 77 LD (HL),A
|
||
171F 23 INC HL
|
||
1720 79 LD A,C
|
||
1721 2F CPL
|
||
1722 A3 AND E
|
||
1723 77 LD (HL),A
|
||
1724 C3F211 JP MLOOP
|
||
;
|
||
; ---------
|
||
; SET [11]
|
||
; ---------
|
||
; SET VARIABLE "ARG1" EQUAL TO VALUE "ARG2"
|
||
1727 3A9D21 ZSET: LD A,(ARG1)
|
||
172A 2A9F21 LD HL,(ARG2)
|
||
172D CD4713 VARPTR: CALL VARPUT
|
||
1730 C3F211 JP MLOOP
|
||
;
|
||
; ----------
|
||
; MOVE [12]
|
||
; ----------
|
||
; PUT OBJECT "ARG1" INTO OBJECT "ARG2"
|
||
1733 CDAA15 MOVE: CALL REMOVC ;REMOVE OBJECT FIRST
|
||
1736 3A9D21 LD A,(ARG1)
|
||
1739 CDD61C CALL OBJLOC
|
||
173C E5 PUSH HL ;SAVE LOC OF FIRST ARG
|
||
173D 110400 LD DE,4
|
||
1740 19 ADD HL,DE ;LOC SLOT
|
||
1741 3A9F21 LD A,(ARG2)
|
||
1744 77 LD (HL),A
|
||
1745 CDD61C CALL OBJLOC
|
||
1748 110600 LD DE,6
|
||
174B 19 ADD HL,DE ;FIRST SLOT
|
||
174C 46 LD B,(HL)
|
||
174D 3A9D21 LD A,(ARG1)
|
||
1750 77 LD (HL),A
|
||
1751 E1 POP HL
|
||
1752 78 LD A,B
|
||
1753 B7 OR A
|
||
1754 CAF211 JP Z,MLOOP
|
||
1757 110500 LD DE,5
|
||
175A 19 ADD HL,DE
|
||
175B 77 LD (HL),A ;NEXT SLOT
|
||
175C C3F211 JP MLOOP
|
||
;
|
||
; ---------
|
||
; GET [13]
|
||
; ---------
|
||
; RETURN VALUE OF ITEM "ARG2" IN WORD-TABLE AT "ARG1"
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 53
|
||
|
||
|
||
175F 2A9F21 GET: LD HL,(ARG2)
|
||
1762 29 ADD HL,HL ;ITEM NUMBER*2
|
||
1763 EB EX DE,HL
|
||
1764 2A9D21 LD HL,(ARG1)
|
||
1767 19 ADD HL,DE ;POINTER TO ITEM
|
||
1768 CDC61D CALL SETWRD
|
||
176B CD071E CALL GETWRD ;GET VALUE
|
||
176E C30D13 JP PUTVAL
|
||
;
|
||
; ----------
|
||
; GETB [14]
|
||
; ----------
|
||
; RETURN VALUE OF ITEM "ARG2" IN BYTE-TABLE AT "ARG1" [VALUE]
|
||
1771 2A9F21 GETB: LD HL,(ARG2)
|
||
1774 EB EX DE,HL
|
||
1775 2A9D21 LD HL,(ARG1)
|
||
1778 19 ADD HL,DE
|
||
1779 CDC61D CALL SETWRD
|
||
177C CD121E CALL GETBYT
|
||
177F 6F LD L,A
|
||
1780 2600 LD H,0
|
||
1782 C30D13 JP PUTVAL
|
||
;
|
||
; ----------
|
||
; GETP [15]
|
||
; ----------
|
||
; RETURN PROP "ARG2" OF OBJECT "ARG1"; IF SPECIFIED PROP DOES
|
||
; NOT EXIST, RETUURN PROP'TH ELEMENT OF DEFAULT OBJECT [VALUE]
|
||
1785 CDAC1C GETP: CALL PROPB ;GET POINTER TO PROPS IN PROP TABLE
|
||
1788 CDC31C GETP1: CALL PROPN
|
||
178B 47 LD B,A
|
||
178C 3A9F21 LD A,(ARG2)
|
||
178F B8 CP B
|
||
1790 CAB917 JP Z,GETP2 ;FOUND PROP
|
||
1793 D29C17 JP NC,GETP3 ;GET PROP FROM DEFAULT TABLE
|
||
1796 CDCE1C CALL PROPNX ;TRY AGAIN WITH NEXT PROP
|
||
1799 C38817 JP GETP1
|
||
|
||
179C 2ABB21 GETP3: LD HL,(ZCODEP)
|
||
179F 110A00 LD DE,ZOBJEC
|
||
17A2 19 ADD HL,DE
|
||
17A3 56 LD D,(HL)
|
||
17A4 23 INC HL
|
||
17A5 5E LD E,(HL)
|
||
17A6 2ABB21 LD HL,(ZCODEP)
|
||
17A9 19 ADD HL,DE ;BEG OF OBJECT TABLE
|
||
17AA 3A9F21 LD A,(ARG2)
|
||
17AD 87 ADD A,A
|
||
17AE CDEA1E CALL HLOFF
|
||
17B1 2B DEC HL
|
||
17B2 5E LD E,(HL)
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 54
|
||
|
||
|
||
17B3 2B DEC HL
|
||
17B4 56 LD D,(HL)
|
||
17B5 EB EX DE,HL
|
||
17B6 C30D13 JP PUTVAL ;RETURN DEFAULT VALUE
|
||
|
||
17B9 CDC71C GETP2: CALL PROPL ;GET LENGTH
|
||
17BC 23 INC HL
|
||
17BD 3D DEC A
|
||
17BE FACB17 JP M,GETP2A ;1 BYTE
|
||
17C1 C40602 CALL NZ,ZER ;BAD PROP LENGTH
|
||
17C4 56 LD D,(HL)
|
||
17C5 23 INC HL
|
||
17C6 5E LD E,(HL)
|
||
17C7 EB EX DE,HL
|
||
17C8 C30D13 JP PUTVAL ;RETURN TWO BYTE PROP
|
||
|
||
17CB 6E GETP2A: LD L,(HL)
|
||
17CC 2600 LD H,0
|
||
17CE C30D13 JP PUTVAL
|
||
|
||
17D1 CDAC1C GETPT: CALL PROPB
|
||
17D4 CDC31C GETPT1: CALL PROPN
|
||
17D7 47 LD B,A
|
||
17D8 3A9F21 LD A,(ARG2)
|
||
17DB B8 CP B
|
||
17DC CAE817 JP Z,GETPT2 ;FOUND PROP
|
||
17DF D20913 JP NC,RET0
|
||
17E2 CDCE1C CALL PROPNX
|
||
17E5 C3D417 JP GETPT1
|
||
|
||
17E8 23 GETPT2: INC HL
|
||
17E9 EB EX DE,HL
|
||
17EA 2ABB21 LD HL,(ZCODEP) ;SUBRACT OFF RELATIVE POINTER
|
||
17ED 7B LD A,E
|
||
17EE 95 SUB L
|
||
17EF 6F LD L,A
|
||
17F0 7A LD A,D
|
||
17F1 9C SBC A,H
|
||
17F2 67 LD H,A
|
||
17F3 C30D13 JP PUTVAL
|
||
|
||
17F6 CDAC1C NEXTP: CALL PROPB ;POINT TO PROP VALUE
|
||
17F9 3A9F21 LD A,(ARG2)
|
||
17FC B7 OR A
|
||
17FD CA1418 JP Z,NEXTP2 ;PROP0
|
||
1800 CDC31C NEXTP1: CALL PROPN
|
||
1803 47 LD B,A
|
||
1804 3A9F21 LD A,(ARG2)
|
||
1807 B8 CP B
|
||
1808 CA1A18 JP Z,NEXTP3 ;FOUND PROP
|
||
180B D20913 JP NC,RET0 ;RETURN 0
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 55
|
||
|
||
|
||
180E CDCE1C CALL PROPNX
|
||
1811 C30018 JP NEXTP1 ;LOOP
|
||
|
||
1814 CDC31C NEXTP2: CALL PROPN
|
||
1817 C30A13 JP PUTBYT
|
||
|
||
181A CDCE1C NEXTP3: CALL PROPNX
|
||
181D C31418 JP NEXTP2 ;PROPN OF NEXT
|
||
|
||
1820 CDF71C ZADD: CALL GETARG
|
||
1823 19 ADD HL,DE
|
||
1824 C30D13 JP PUTVAL
|
||
|
||
1827 CDF71C ZSUB: CALL GETARG
|
||
182A 7B LD A,E
|
||
182B 95 SUB L
|
||
182C 6F LD L,A
|
||
182D 7A LD A,D
|
||
182E 9C SBC A,H
|
||
182F 67 LD H,A
|
||
1830 C30D13 JP PUTVAL
|
||
|
||
1833 CDF71C MUL: CALL GETARG
|
||
1836 EB EX DE,HL
|
||
1837 CD5A1C CALL SIGNC ;CHECK SIGN
|
||
183A E5 PUSH HL
|
||
183B 210200 LD HL,2
|
||
183E CD071D CALL HLGEDE
|
||
1841 CA5A18 JP Z,MUL2
|
||
1844 210400 LD HL,4
|
||
1847 CD071D CALL HLGEDE
|
||
184A CA5718 JP Z,MUL4
|
||
184D E1 POP HL
|
||
184E CDFE1B CALL MULT ;DO THE MULTIPLY
|
||
1851 CD671C MUL1: CALL SIGNS ;SET THE SIGN
|
||
1854 C30D13 JP PUTVAL ;THEN STORE RESULT
|
||
|
||
1857 E1 MUL4: POP HL
|
||
1858 29 ADD HL,HL
|
||
1859 E5 PUSH HL
|
||
185A E1 MUL2: POP HL
|
||
185B 29 ADD HL,HL
|
||
185C C35118 JP MUL1
|
||
|
||
185F CDF71C DIV: CALL GETARG
|
||
1862 EB EX DE,HL
|
||
1863 CD5A1C CALL SIGNC ;CHECK SIGNS
|
||
1866 E5 PUSH HL
|
||
1867 210200 LD HL,2
|
||
186A CD071D CALL HLGEDE
|
||
186D CA8018 JP Z,DIV2 ;DIVIDE BY 2
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 56
|
||
|
||
|
||
1870 210400 LD HL,4
|
||
1873 CD071D CALL HLGEDE
|
||
1876 CA8718 JP Z,DIV4 ;DIVIDE BY 4
|
||
1879 E1 POP HL
|
||
187A CD271C CALL DIVIDE ;DO THE DIVIDE
|
||
187D C35118 JP MUL1 ;SET SIGN AND RETURN
|
||
|
||
1880 E1 DIV2: POP HL
|
||
1881 CD8E18 DIV2B: CALL DIV2A
|
||
1884 C35118 JP MUL1
|
||
|
||
1887 E1 DIV4: POP HL
|
||
1888 CD8E18 CALL DIV2A
|
||
188B C38118 JP DIV2B
|
||
|
||
188E B7 DIV2A: OR A ;CLEAR CARRY
|
||
188F 7C LD A,H
|
||
1890 1F RRA
|
||
1891 67 LD H,A
|
||
1892 7D LD A,L
|
||
1893 1F RRA
|
||
1894 6F LD L,A
|
||
1895 C9 RET
|
||
|
||
1896 CDF71C ZMOD: CALL GETARG
|
||
1899 EB EX DE,HL
|
||
189A CD5A1C CALL SIGNC ;MAKE THEM POSITIVE
|
||
189D CD271C CALL DIVIDE ;DO THE DIVIDE
|
||
18A0 EB EX DE,HL ;GET THE REMAINDER
|
||
18A1 C30D13 JP PUTVAL
|
||
;
|
||
; *******************
|
||
; * X-OPS *
|
||
; *******************
|
||
;
|
||
18A4 2A9D21 EQUALQ: LD HL,(ARG1)
|
||
18A7 EB EX DE,HL
|
||
18A8 3AA521 LD A,(ARGCNT)
|
||
18AB 47 LD B,A
|
||
18AC 05 DEC B
|
||
18AD CC0602 CALL Z,ZER
|
||
18B0 2A9F21 LD HL,(ARG2)
|
||
18B3 CDC518 CALL EQUAQ1
|
||
18B6 2AA121 LD HL,(ARG3)
|
||
18B9 CDC518 CALL EQUAQ1
|
||
18BC 2AA321 LD HL,(ARG4)
|
||
18BF CDC518 CALL EQUAQ1
|
||
18C2 CD0602 CALL ZER
|
||
|
||
18C5 CD071D EQUAQ1: CALL HLGEDE ;DO COMPARISON
|
||
18C8 E1 POP HL ;RESTORE RETURN ADDRESS
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 57
|
||
|
||
|
||
18C9 CA6213 JP Z,PREDS ;DON'T BOTHER RETURNING
|
||
18CC 05 DEC B ;ARG COUNT
|
||
18CD CA5313 JP Z,PREDF ;OUT OF ARGS, FAIL
|
||
18D0 E9 JP (HL) ;ELSE RETURN
|
||
|
||
18D1 2A9D21 ZCALL: LD HL,(ARG1)
|
||
18D4 7C LD A,H
|
||
18D5 B5 OR L
|
||
18D6 CA0D13 JP Z,PUTVAL
|
||
18D9 2A8D21 LD HL,(OZSTKC)
|
||
18DC CD0E1D CALL PSHSTK
|
||
18DF 2A8B21 LD HL,(OZSTKP)
|
||
18E2 CD0E1D CALL PSHSTK
|
||
18E5 2A8821 LD HL,(ZPCL)
|
||
18E8 CD0E1D CALL PSHSTK ;SAVE OLD PC LOWER
|
||
18EB 2A8721 LD HL,(ZPCH) ;SAVE HIGH IN L
|
||
18EE E5 PUSH HL
|
||
18EF AF XOR A
|
||
18F0 32B021 LD (ZPCFLG),A ;PC HAS CHANGED
|
||
18F3 67 LD H,A
|
||
18F4 3A9D21 LD A,(ARG1)
|
||
18F7 6F LD L,A
|
||
18F8 29 ADD HL,HL ;NEW ZPCL
|
||
18F9 228821 LD (ZPCL),HL
|
||
18FC 3A9E21 LD A,(ARG1+1)
|
||
18FF 328721 LD (ZPCH),A ;NEW ZPCH
|
||
1902 CD3C1D CALL NEXTPC ;GET NUMBER OF LOCALS
|
||
1905 E1 POP HL
|
||
1906 47 LD B,A ;B HAS NUMBER OF LOCALS
|
||
1907 67 LD H,A
|
||
1908 E5 PUSH HL ;SAVE VALUE
|
||
1909 216921 LD HL,LOCALS ;STORE OLD LOCALS
|
||
190C B7 OR A
|
||
190D CA2E19 JP Z,ZCALL2 ;NO LOCALS
|
||
1910 C5 ZCALL1: PUSH BC
|
||
1911 56 LD D,(HL)
|
||
1912 23 INC HL
|
||
1913 5E LD E,(HL)
|
||
1914 EB EX DE,HL
|
||
1915 CD0E1D CALL PSHSTK
|
||
1918 1B DEC DE
|
||
1919 D5 PUSH DE
|
||
191A CD3C1D CALL NEXTPC ;GET NEW DEFAULT VALUE FOR LOCAL
|
||
191D 57 LD D,A
|
||
191E D5 PUSH DE
|
||
191F CD3C1D CALL NEXTPC ;WORD VALUE
|
||
1922 D1 POP DE
|
||
1923 5F LD E,A
|
||
1924 E1 POP HL ;POINTER TO STORE NEW LOCAL
|
||
1925 72 LD (HL),D
|
||
1926 23 INC HL
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 58
|
||
|
||
|
||
1927 73 LD (HL),E
|
||
1928 23 INC HL
|
||
1929 C1 POP BC
|
||
192A 05 DEC B
|
||
192B C21019 JP NZ,ZCALL1 ;LOOP THROUGH ALL LOCALS
|
||
192E 3AA521 ZCALL2: LD A,(ARGCNT) ;PASS ARGS
|
||
1931 47 LD B,A
|
||
1932 05 DEC B
|
||
1933 CA4A19 JP Z,ZCALL4 ;NO ARGS TO PASS
|
||
1936 219F21 LD HL,ARG2 ;POINTER TO FIRST ARG
|
||
1939 116921 LD DE,LOCALS
|
||
193C 7E ZCALL3: LD A,(HL)
|
||
193D 23 INC HL
|
||
193E 13 INC DE
|
||
193F 12 LD (DE),A
|
||
1940 1B DEC DE
|
||
1941 7E LD A,(HL)
|
||
1942 23 INC HL
|
||
1943 12 LD (DE),A
|
||
1944 13 INC DE
|
||
1945 13 INC DE
|
||
1946 05 DEC B
|
||
1947 C23C19 JP NZ,ZCALL3
|
||
194A E1 ZCALL4: POP HL ;GET BACK ZPCH AND NUMBER OF LOCALS
|
||
194B CD0E1D CALL PSHSTK
|
||
194E 3A8A21 LD A,(ZSTAKC)
|
||
1951 328D21 LD (OZSTKC),A
|
||
1954 2AE90D LD HL,(ZSTAKP)
|
||
1957 228B21 LD (OZSTKP),HL ;FOR KNOWING WHERE TO RETURN
|
||
195A C3F211 JP MLOOP
|
||
|
||
195D 2A9F21 PUT: LD HL,(ARG2)
|
||
1960 29 ADD HL,HL
|
||
1961 EB EX DE,HL
|
||
1962 2A9D21 LD HL,(ARG1)
|
||
1965 19 ADD HL,DE ;Z ADDRESS
|
||
1966 EB EX DE,HL
|
||
1967 2ABB21 LD HL,(ZCODEP)
|
||
196A 19 ADD HL,DE ;REAL POINTER
|
||
196B EB EX DE,HL
|
||
196C 2AA121 LD HL,(ARG3) ;VALUE TO STORE
|
||
196F EB EX DE,HL
|
||
1970 72 LD (HL),D
|
||
1971 23 INC HL
|
||
1972 73 LD (HL),E
|
||
1973 C3F211 JP MLOOP
|
||
|
||
1976 2A9F21 PUTB: LD HL,(ARG2)
|
||
1979 EB EX DE,HL
|
||
197A 2A9D21 LD HL,(ARG1)
|
||
197D 19 ADD HL,DE
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 59
|
||
|
||
|
||
197E EB EX DE,HL
|
||
197F 2ABB21 LD HL,(ZCODEP)
|
||
1982 19 ADD HL,DE
|
||
1983 3AA121 LD A,(ARG3)
|
||
1986 77 LD (HL),A ;STORE ONE BYTE IN RANDOM TABLE
|
||
1987 C3F211 JP MLOOP
|
||
|
||
198A CDAC1C PUTP: CALL PROPB ;SET PROP
|
||
198D CDC31C PUTP1: CALL PROPN ;GET PROP NUMBER
|
||
1990 47 LD B,A
|
||
1991 3A9F21 LD A,(ARG2)
|
||
1994 B8 CP B
|
||
1995 CAA119 JP Z,PUTP2 ;FOUND PROPERTY
|
||
1998 D40602 CALL NC,ZER ;BAD PROP NUMBER
|
||
199B CDCE1C CALL PROPNX ;TRY NEXT
|
||
199E C38D19 JP PUTP1
|
||
|
||
19A1 CDC71C PUTP2: CALL PROPL ;GET LENGTH
|
||
19A4 23 INC HL
|
||
19A5 EB EX DE,HL
|
||
19A6 2AA121 LD HL,(ARG3)
|
||
19A9 3D DEC A
|
||
19AA FAB719 JP M,PUTP2A ;STORE 1 BYTE
|
||
19AD C40602 CALL NZ,ZER ;TOO LONG
|
||
19B0 EB EX DE,HL
|
||
19B1 72 LD (HL),D
|
||
19B2 23 INC HL
|
||
19B3 73 LD (HL),E
|
||
19B4 C3F211 JP MLOOP ;RETURN
|
||
|
||
19B7 EB PUTP2A: EX DE,HL
|
||
19B8 73 LD (HL),E
|
||
19B9 C3F211 JP MLOOP ;SET AND RETURN
|
||
|
||
|
||
19BC ZREAD:
|
||
19BC CDC105 CALL WHOLIN
|
||
19BF CDD01B CALL RND ;RANDOMIZE
|
||
19C2 2ABB21 LD HL,(ZCODEP) ;MAIN READ CODE
|
||
19C5 EB EX DE,HL ;GET REAL POINTERS TO TABLES
|
||
19C6 2A9D21 LD HL,(ARG1)
|
||
19C9 19 ADD HL,DE ;BUFFER TABLE
|
||
19CA 229D21 LD (ARG1),HL
|
||
19CD 2A9F21 LD HL,(ARG2)
|
||
19D0 19 ADD HL,DE ;RESULT TABLE
|
||
19D1 229F21 LD (ARG2),HL
|
||
19D4 CD5403 CALL READBF ;READ THE BUFFER
|
||
19D7 47 LD B,A ;CHARACTER COUNT IN B
|
||
19D8 0E00 LD C,0 ;C HAS CHARACTERS IN WORD
|
||
19DA 2A9F21 LD HL,(ARG2)
|
||
19DD 23 INC HL
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 60
|
||
|
||
|
||
19DE 3600 LD (HL),0 ;SET WORDS READ TO 0
|
||
19E0 23 INC HL
|
||
19E1 22CB21 LD (RTABP),HL ;INITIALIZE RESULT TABLE POINTER
|
||
19E4 2A9D21 LD HL,(ARG1)
|
||
19E7 23 INC HL ;HL HAS POINTER TO INPUT CHARACTERS
|
||
19E8 E5 READL: PUSH HL
|
||
19E9 2A9F21 LD HL,(ARG2)
|
||
19EC 7E LD A,(HL)
|
||
19ED 23 INC HL
|
||
19EE BE CP (HL)
|
||
19EF E1 POP HL
|
||
19F0 CAF211 JP Z,MLOOP ;TOO MANY WORDS
|
||
;ERROR HERE IF DESIRED INSTEAD OF JZ
|
||
19F3 78 LD A,B
|
||
19F4 B1 OR C
|
||
19F5 CAF211 JP Z,MLOOP ;OUT OF CHARACTERS AND WORDS
|
||
19F8 79 LD A,C
|
||
19F9 FE06 CP 6
|
||
19FB CC811A CALL Z,FLUSHW ;FLUSH CHARS IN A WORD OVER 6 CHARACTERS
|
||
19FE 79 LD A,C
|
||
19FF B7 OR A
|
||
1A00 C2331A JP NZ,READL2 ;NOT FIRST CHARACTER IN WORD
|
||
1A03 E5 PUSH HL
|
||
1A04 1606 LD D,6
|
||
1A06 219221 LD HL,ZSTBUI ;INITIALIZE WORD BUFFER
|
||
1A09 3600 RD0PL: LD (HL),0
|
||
1A0B 23 INC HL
|
||
1A0C 15 DEC D
|
||
1A0D C2091A JP NZ,RD0PL
|
||
1A10 E1 POP HL
|
||
1A11 3A9D21 LD A,(ARG1)
|
||
1A14 57 LD D,A
|
||
1A15 7D LD A,L
|
||
1A16 92 SUB D ;POSITION OF START OF WORD
|
||
1A17 E5 PUSH HL
|
||
1A18 2ACB21 LD HL,(RTABP)
|
||
1A1B 23 INC HL
|
||
1A1C 23 INC HL
|
||
1A1D 23 INC HL
|
||
1A1E 77 LD (HL),A ;STORE IN RESULT TABLE
|
||
1A1F E1 POP HL
|
||
1A20 7E LD A,(HL)
|
||
1A21 CDA81A CALL SIBRKQ ;SELF INSERTING BREAK?
|
||
1A24 DA501A JP C,RSIBRK
|
||
1A27 7E LD A,(HL)
|
||
1A28 CD8F1A CALL RBRKQ ;NORMAL BREAK?
|
||
1A2B D2331A JP NC,READL2 ;NO
|
||
1A2E 23 INC HL ;YES, FLUSH STRANDED BREAKS
|
||
1A2F 05 DEC B
|
||
1A30 C3E819 JP READL ;LOOP BACK
|
||
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 61
|
||
|
||
|
||
1A33 78 READL2: LD A,B
|
||
1A34 B7 OR A
|
||
1A35 CA561A JP Z,READL3 ;OUT OF CHARACTERS, SIMULATE WORD ENDING
|
||
1A38 7E LD A,(HL)
|
||
1A39 CD8F1A CALL RBRKQ ;WORD BREAK?
|
||
1A3C DA561A JP C,READL3 ;FOUND A BREAK
|
||
1A3F 56 LD D,(HL)
|
||
1A40 E5 PUSH HL
|
||
1A41 219221 LD HL,ZSTBUI
|
||
1A44 79 LD A,C
|
||
1A45 CDEA1E CALL HLOFF
|
||
1A48 72 LD (HL),D ;STORE CHARACTER IN BUFFER
|
||
1A49 E1 POP HL
|
||
1A4A 05 DEC B ;ONE LESS CHARACTER
|
||
1A4B 0C INC C ;ONE MORE CHARACTER IN WORD
|
||
1A4C 23 INC HL ;POINT TO NEXT CHARACTER
|
||
1A4D C3E819 JP READL
|
||
|
||
1A50 329221 RSIBRK: LD (ZSTBUI),A ;STORE SELF INSERTING BREAK
|
||
1A53 0C INC C ;1 CHAR
|
||
1A54 05 DEC B ;1 LESS CHAR
|
||
1A55 23 INC HL
|
||
1A56 79 READL3: LD A,C ;INSERT WORD IF ANY CHARACTERS IN WORD
|
||
1A57 B7 OR A
|
||
1A58 CAE819 JP Z,READL ;NO CHARACTERS IN WORD
|
||
1A5B E5 PUSH HL
|
||
1A5C C5 PUSH BC
|
||
1A5D 2ACB21 LD HL,(RTABP) ;STORE PARAMS IN TABLE
|
||
1A60 23 INC HL
|
||
1A61 23 INC HL
|
||
1A62 71 LD (HL),C ;REAL LENGTH OF WORD
|
||
1A63 CD7220 CALL CONZST ;CONVERT TO ZSTRING
|
||
1A66 CDCF1A CALL FINDW ;LOOK UP WORD IN VOCAB TABLE
|
||
1A69 2ACB21 LD HL,(RTABP) ;STORE RESULT
|
||
1A6C 72 LD (HL),D
|
||
1A6D 23 INC HL
|
||
1A6E 73 LD (HL),E
|
||
1A6F 23 INC HL
|
||
1A70 23 INC HL
|
||
1A71 23 INC HL
|
||
1A72 22CB21 LD (RTABP),HL ;POINTER TO NEXT WORD
|
||
1A75 2A9F21 LD HL,(ARG2)
|
||
1A78 23 INC HL
|
||
1A79 34 INC (HL) ;ONE MORE WORD
|
||
1A7A C1 POP BC
|
||
1A7B E1 POP HL
|
||
1A7C 0E00 LD C,0 ;ZERO CHARACTERS IN NEXT WORD
|
||
1A7E C3E819 JP READL
|
||
|
||
1A81 78 FLUSHW: LD A,B
|
||
1A82 B7 OR A ;FLUSH CHARACTERS TILL BREAD OR END OF BUFFER
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 62
|
||
|
||
|
||
1A83 C8 RET Z
|
||
1A84 7E LD A,(HL)
|
||
1A85 CD8F1A CALL RBRKQ
|
||
1A88 D8 RET C ;FOUND A BREAK
|
||
1A89 23 INC HL
|
||
1A8A 05 DEC B
|
||
1A8B 0C INC C
|
||
1A8C C3811A JP FLUSHW
|
||
|
||
1A8F CDA81A RBRKQ: CALL SIBRKQ ;FIRST CHECK SELF INSERTING BREAKS
|
||
1A92 D8 RET C ;YES
|
||
1A93 E5 PUSH HL
|
||
1A94 21C51A LD HL,BRKTBL
|
||
1A97 160A LD D,NBRKS
|
||
1A99 BE RBRK1: CP (HL)
|
||
1A9A CAA51A JP Z,FBRK ;MATCH
|
||
1A9D 23 INC HL
|
||
1A9E 15 DEC D
|
||
1A9F C2991A JP NZ,RBRK1
|
||
1AA2 E1 RBRK2: POP HL ;NOT FOUND
|
||
1AA3 B7 OR A ;CLEAR CARRY
|
||
1AA4 C9 RET
|
||
|
||
1AA5 E1 FBRK: POP HL
|
||
1AA6 37 SCF
|
||
1AA7 C9 RET ;FOUND A BREAK, SET CARRY AND RETURN
|
||
|
||
1AA8 E5 SIBRKQ: PUSH HL
|
||
1AA9 CDB61A CALL GETVOC
|
||
1AAC 56 LD D,(HL) ;NUMBER OF SELF INSERTING BREAKS
|
||
1AAD 15 DEC D
|
||
1AAE 14 INC D
|
||
1AAF CAA21A JP Z,RBRK2 ;FAIL
|
||
1AB2 23 INC HL
|
||
1AB3 C3991A JP RBRK1
|
||
|
||
1AB6 2ABB21 GETVOC: LD HL,(ZCODEP)
|
||
1AB9 110800 LD DE,ZVOCAB
|
||
1ABC 19 ADD HL,DE
|
||
1ABD 56 LD D,(HL)
|
||
1ABE 23 INC HL
|
||
1ABF 5E LD E,(HL)
|
||
1AC0 2ABB21 LD HL,(ZCODEP)
|
||
1AC3 19 ADD HL,DE
|
||
1AC4 C9 RET
|
||
|
||
1AC5 202E2C3F BRKTBL: DB ' .,?'
|
||
1AC9 0D0A090C DB 0DH,0AH,9H,0CH
|
||
1ACD 2222 DB 22H,22H
|
||
|
||
000A NBRKS EQU $-BRKTBL
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 63
|
||
|
||
|
||
|
||
1ACF CDB61A FINDW: CALL GETVOC ;FIND WORD IN VOCAB TABLE, ASSUMES VOCAB IN MEMORY
|
||
1AD2 7E LD A,(HL)
|
||
1AD3 23 INC HL
|
||
1AD4 CDEA1E CALL HLOFF ;SKIP OVER SELF INSERTING BREAKS
|
||
1AD7 7E LD A,(HL)
|
||
1AD8 87 ADD A,A
|
||
1AD9 87 ADD A,A
|
||
1ADA 87 ADD A,A
|
||
1ADB 87 ADD A,A
|
||
1ADC 4F LD C,A ;C HAS 16 TIMES VOCAB ENTRY SIZE
|
||
1ADD 23 INC HL
|
||
1ADE 56 LD D,(HL)
|
||
1ADF 23 INC HL
|
||
1AE0 5E LD E,(HL)
|
||
1AE1 23 INC HL ;HL POINTS TO VOCAB TABLE
|
||
1AE2 3AC621 LD A,(ZSTBUO+1) ;GET FIRST CHARACTER
|
||
1AE5 47 LD B,A ;PUT IT IN B
|
||
1AE6 C3F21A JP FWL2 ;WE CAN'T START AT THE BEGINNING
|
||
|
||
1AE9 B2 FWL1A: OR D ;HERE ON 16 WORD BOUNDRY
|
||
1AEA CA071B JP Z,FWL3 ;END OF TABLE
|
||
1AED 7E FWL1: LD A,(HL)
|
||
1AEE B8 CP B ;CHECK ONLY FIRST BYTE
|
||
1AEF D2071B JP NC,FWL3 ;FOUND PROPER AREA FOR FINE SEARCH
|
||
1AF2 7D FWL2: LD A,L
|
||
1AF3 81 ADD A,C
|
||
1AF4 6F LD L,A
|
||
1AF5 7C LD A,H
|
||
1AF6 CE00 ADC A,0
|
||
1AF8 67 LD H,A ;POINTER TO NEXT BLOCK (HLOFF NOT USED FOR SPEED)
|
||
1AF9 7B LD A,E
|
||
1AFA D610 SUB 16 ;16 MORE WORDS
|
||
1AFC 5F LD E,A
|
||
1AFD CAE91A JP Z,FWL1A
|
||
1B00 D2ED1A JP NC,FWL1
|
||
1B03 15 DEC D
|
||
1B04 F2ED1A JP P,FWL1 ;NOT OUT OF WORDS
|
||
1B07 7D FWL3: LD A,L ;NOW DO FINE CHECK
|
||
1B08 91 SUB C ;BACKUP 16 WORDS
|
||
1B09 6F LD L,A
|
||
1B0A 7C LD A,H
|
||
1B0B DE00 SBC A,0
|
||
1B0D 67 LD H,A
|
||
1B0E 7B LD A,E
|
||
1B0F C610 ADD A,16
|
||
1B11 5F LD E,A
|
||
1B12 7A LD A,D
|
||
1B13 CE00 ADC A,0
|
||
1B15 57 LD D,A ;BACKUP COUNT
|
||
1B16 79 LD A,C
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 64
|
||
|
||
|
||
1B17 0F RRCA
|
||
1B18 0F RRCA
|
||
1B19 0F RRCA
|
||
1B1A 0F RRCA
|
||
1B1B 4F LD C,A ;REAL ENTRY SIZE
|
||
1B1C FWL4:
|
||
1B1C 3AC621 LD A,(ZSTBUO+1)
|
||
1B1F BE CP (HL)
|
||
1B20 DA541B JP C,FWFAIL
|
||
1B23 C24A1B JP NZ,FWL4A ;CHECK ALL 4 BYTES
|
||
1B26 23 INC HL
|
||
1B27 3AC521 LD A,(ZSTBUO)
|
||
1B2A BE CP (HL)
|
||
1B2B DA541B JP C,FWFAIL
|
||
1B2E C2491B JP NZ,FWL4B
|
||
1B31 23 INC HL
|
||
1B32 3AC821 LD A,(ZSTBUO+3)
|
||
1B35 BE CP (HL)
|
||
1B36 DA541B JP C,FWFAIL
|
||
1B39 C2481B JP NZ,FWL4C
|
||
1B3C 23 INC HL
|
||
1B3D 3AC721 LD A,(ZSTBUO+2)
|
||
1B40 BE CP (HL)
|
||
1B41 DA541B JP C,FWFAIL
|
||
1B44 CA581B JP Z,FWSUCC ;MATCH
|
||
1B47 2B DEC HL
|
||
1B48 2B FWL4C: DEC HL
|
||
1B49 2B FWL4B: DEC HL
|
||
1B4A 79 FWL4A: LD A,C
|
||
1B4B CDEA1E CALL HLOFF
|
||
1B4E 1B DEC DE
|
||
1B4F 7A LD A,D
|
||
1B50 B3 OR E
|
||
1B51 C21C1B JP NZ,FWL4 ;NOT OUT OF WORDS YET
|
||
1B54 110000 FWFAIL: LD DE,0
|
||
1B57 C9 RET
|
||
|
||
1B58 2B FWSUCC: DEC HL
|
||
1B59 2B DEC HL
|
||
1B5A 2B DEC HL
|
||
1B5B EB EX DE,HL
|
||
1B5C 2ABB21 LD HL,(ZCODEP)
|
||
1B5F 7B LD A,E
|
||
1B60 95 SUB L
|
||
1B61 5F LD E,A
|
||
1B62 7A LD A,D
|
||
1B63 9C SBC A,H
|
||
1B64 57 LD D,A
|
||
1B65 C9 RET
|
||
|
||
1B66 3A9D21 PRINTC: LD A,(ARG1)
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 65
|
||
|
||
|
||
1B69 4F LD C,A
|
||
1B6A CDB604 CALL COUT
|
||
1B6D C3F211 JP MLOOP
|
||
|
||
1B70 2A9D21 PRINTN: LD HL,(ARG1)
|
||
1B73 CD791B CALL PRNTNC
|
||
1B76 C3F211 JP MLOOP
|
||
|
||
1B79 7C PRNTNC: LD A,H
|
||
1B7A B7 OR A
|
||
1B7B FCA71B CALL M,PRNTNG ;NEGATIVE NUMBER
|
||
1B7E 0600 LD B,0 ;DIGIT COUNT
|
||
1B80 7C PRNTN1: LD A,H
|
||
1B81 B5 OR L
|
||
1B82 CA901B JP Z,PRNTN3
|
||
1B85 110A00 LD DE,10
|
||
1B88 CD271C CALL DIVIDE
|
||
1B8B D5 PUSH DE
|
||
1B8C 04 INC B
|
||
1B8D C3801B JP PRNTN1
|
||
|
||
1B90 AF PRNTN3: XOR A
|
||
1B91 80 ADD A,B
|
||
1B92 CAA21B JP Z,PRNTN6 ;PRINT AT LEAST 0
|
||
1B95 D1 PRNTN4: POP DE
|
||
1B96 3E30 LD A,'0'
|
||
1B98 83 ADD A,E
|
||
1B99 4F LD C,A
|
||
1B9A CDB604 CALL COUT
|
||
1B9D 05 DEC B
|
||
1B9E C2951B JP NZ,PRNTN4
|
||
1BA1 C9 RET
|
||
|
||
1BA2 0E30 PRNTN6: LD C,'0'
|
||
1BA4 C3B604 JP COUT
|
||
|
||
1BA7 0E2D PRNTNG: LD C,'-' ;PRINT -
|
||
1BA9 CDB604 CALL COUT
|
||
1BAC C36D1C JP SIGNCN ;CHANGE SIGN
|
||
|
||
1BAF 2A9D21 RANDOM: LD HL,(ARG1) ;RANDOM GENERATOR
|
||
1BB2 EB EX DE,HL
|
||
1BB3 CDD01B CALL RND ;GET THE BASE NUMBER
|
||
1BB6 CD271C CALL DIVIDE
|
||
1BB9 EB EX DE,HL ;GET REMAINDER
|
||
1BBA 23 INC HL ;MAKE NOT EQUAL TO 0
|
||
1BBB C30D13 JP PUTVAL
|
||
|
||
1BBE 2A9D21 ZPUSH: LD HL,(ARG1)
|
||
1BC1 CD0E1D CALL PSHSTK
|
||
1BC4 C3F211 JP MLOOP
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 66
|
||
|
||
|
||
|
||
1BC7 CD271D ZPOP: CALL POPSTK
|
||
1BCA 3A9D21 LD A,(ARG1)
|
||
1BCD C32D17 JP VARPTR
|
||
;
|
||
; **********************************************************************
|
||
; * *
|
||
; * ZORK - RANDOM ROUTINES *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
1BD0 C5 RND: PUSH BC
|
||
1BD1 0E02 LD C,2 ;2 TIMES THROUGH LOOP
|
||
1BD3 0608 RND2: LD B,8
|
||
1BD5 218E21 LD HL,SHIFT
|
||
1BD8 7E LD A,(HL)
|
||
1BD9 07 RND1: RLCA
|
||
1BDA 07 RLCA
|
||
1BDB 07 RLCA
|
||
1BDC AE XOR (HL)
|
||
1BDD 17 RLA
|
||
1BDE 17 RLA
|
||
1BDF 218E21 LD HL,SHIFT
|
||
1BE2 7E LD A,(HL)
|
||
1BE3 17 RLA
|
||
1BE4 77 LD (HL),A
|
||
1BE5 23 INC HL
|
||
1BE6 7E LD A,(HL)
|
||
1BE7 17 RLA
|
||
1BE8 77 LD (HL),A
|
||
1BE9 23 INC HL
|
||
1BEA 7E LD A,(HL)
|
||
1BEB 17 RLA
|
||
1BEC 77 LD (HL),A
|
||
1BED 23 INC HL
|
||
1BEE 7E LD A,(HL)
|
||
1BEF 17 RLA
|
||
1BF0 77 LD (HL),A
|
||
1BF1 05 DEC B
|
||
1BF2 C2D91B JP NZ,RND1
|
||
1BF5 0D DEC C
|
||
1BF6 C2D31B JP NZ,RND2
|
||
1BF9 C1 POP BC
|
||
1BFA 2A9021 LD HL,(SHIFT+2) ;GET THE NUMBER
|
||
1BFD C9 RET
|
||
|
||
1BFE C5 MULT: PUSH BC ;DEHL <=DE*HL
|
||
1BFF 010000 LD BC,0
|
||
1C02 3E10 LD A,16 ;LOOP COUNTER
|
||
1C04 F5 MULT1: PUSH AF
|
||
1C05 7B LD A,E
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 67
|
||
|
||
|
||
1C06 E601 AND 1 ;CHECK BIT FOR ADD
|
||
1C08 CA101C JP Z,MULT2 ;SKIP ADD PART IF 0
|
||
1C0B E5 PUSH HL ;SAVE MULTIPLIER
|
||
1C0C 09 ADD HL,BC ;ADD PART
|
||
1C0D 44 LD B,H
|
||
1C0E 4D LD C,L
|
||
1C0F E1 POP HL ;RESTORE H
|
||
1C10 78 MULT2: LD A,B ;32 BIT SHIFT REMEMBERING CARRY
|
||
1C11 1F RRA
|
||
1C12 47 LD B,A
|
||
1C13 79 LD A,C
|
||
1C14 1F RRA
|
||
1C15 4F LD C,A
|
||
1C16 7A LD A,D
|
||
1C17 1F RRA
|
||
1C18 57 LD D,A
|
||
1C19 7B LD A,E
|
||
1C1A 1F RRA
|
||
1C1B 5F LD E,A
|
||
1C1C F1 POP AF ;GET BACK LOOP COUNT
|
||
1C1D 3D DEC A
|
||
1C1E C2041C JP NZ,MULT1
|
||
1C21 62 LD H,D ;PUT LOW ORDER ANSWER IN HL
|
||
1C22 6B LD L,E
|
||
1C23 50 LD D,B ;HIGH PART IN DE
|
||
1C24 59 LD E,C
|
||
1C25 C1 POP BC
|
||
1C26 C9 RET
|
||
|
||
1C27 C5 DIVIDE: PUSH BC ;HL<=HL/DE, REMAINDER IN DE
|
||
1C28 44 LD B,H
|
||
1C29 4D LD C,L
|
||
1C2A 7A LD A,D ;NEGATE DIVISOR
|
||
1C2B 2F CPL
|
||
1C2C 57 LD D,A
|
||
1C2D 7B LD A,E
|
||
1C2E 2F CPL
|
||
1C2F 5F LD E,A
|
||
1C30 13 INC DE ;FOR TWO'S COMPLEMENT
|
||
1C31 210000 LD HL,0 ;INITIAL VALUE FOR REMAINDER
|
||
1C34 3E11 LD A,17 ;INIT LOOP COUNTER
|
||
1C36 E5 DDIV0: PUSH HL ;SAVE REMAINDER
|
||
1C37 19 ADD HL,DE ;SUB DIVIS
|
||
1C38 D23C1C JP NC,DDIV1 ;UNDERFLOW, RESTORE HL
|
||
1C3B E3 EX (SP),HL
|
||
1C3C E1 DDIV1: POP HL
|
||
1C3D F5 PUSH AF ;SAVE LOOP COUNTER
|
||
1C3E 79 LD A,C ;4 REG SHIFT LEFT
|
||
1C3F 17 RLA ;WITH CARRY
|
||
1C40 4F LD C,A ;CY->C->B->L->H
|
||
1C41 78 LD A,B
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 68
|
||
|
||
|
||
1C42 17 RLA
|
||
1C43 47 LD B,A
|
||
1C44 7D LD A,L
|
||
1C45 17 RLA
|
||
1C46 6F LD L,A
|
||
1C47 7C LD A,H
|
||
1C48 17 RLA
|
||
1C49 67 LD H,A
|
||
1C4A F1 POP AF ;RESTORE LOOP COUNTER
|
||
1C4B 3D DEC A ;DECREMENT IT
|
||
1C4C C2361C JP NZ,DDIV0 ;KEEP LOOPING
|
||
|
||
;CLEANUP, SHIFT REMAINDER RIGHT AND RETURN IN DE
|
||
1C4F B7 OR A
|
||
1C50 7C LD A,H
|
||
1C51 1F RRA
|
||
1C52 57 LD D,A
|
||
1C53 7D LD A,L
|
||
1C54 1F RRA
|
||
1C55 5F LD E,A
|
||
1C56 60 LD H,B
|
||
1C57 69 LD L,C
|
||
1C58 C1 POP BC
|
||
1C59 C9 RET
|
||
|
||
1C5A AF SIGNC: XOR A
|
||
1C5B 329C21 LD (SIGNF),A ;SET SIGNF
|
||
1C5E CD751C CALL SIGNPC ;POS CHECK
|
||
1C61 EB EX DE,HL
|
||
1C62 CD751C CALL SIGNPC
|
||
1C65 EB EX DE,HL
|
||
1C66 C9 RET
|
||
|
||
1C67 3A9C21 SIGNS: LD A,(SIGNF) ;CHECK FOR SIGN
|
||
1C6A E601 AND 1 ;EVEN OR ODD
|
||
1C6C C8 RET Z ;EVEN NUMBER OF NEGATIVES, ANSWER OK
|
||
1C6D AF SIGNCN: XOR A ;CHANGE SIGN
|
||
1C6E 95 SUB L
|
||
1C6F 6F LD L,A
|
||
1C70 3E00 LD A,0
|
||
1C72 9C SBC A,H
|
||
1C73 67 LD H,A ;INVERTED HL
|
||
1C74 C9 RET
|
||
|
||
1C75 7C SIGNPC: LD A,H
|
||
1C76 B7 OR A
|
||
1C77 F0 RET P ;POSITIVE
|
||
1C78 3A9C21 LD A,(SIGNF)
|
||
1C7B 3C INC A
|
||
1C7C 329C21 LD (SIGNF),A
|
||
1C7F C36D1C JP SIGNCN ;CHANGE SIGN
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 69
|
||
|
||
|
||
|
||
1C82 3A9D21 FLAGSU: LD A,(ARG1) ;SETUP FOR FLAG ROUTINES
|
||
1C85 CDD61C CALL OBJLOC ;BC WILL HAVE BIT POSITION, DE FLAG VALUE
|
||
1C88 3A9F21 LD A,(ARG2) ;HL WILL GET OBJ POINTER
|
||
1C8B FE10 CP 16
|
||
1C8D DA941C JP C,FLGSU1 ;NEXT WORD
|
||
1C90 D610 SUB 16 ;SECOND SET OF FLAGS
|
||
1C92 23 INC HL
|
||
1C93 23 INC HL
|
||
1C94 E5 FLGSU1: PUSH HL
|
||
1C95 47 LD B,A
|
||
1C96 3E0F LD A,15
|
||
1C98 90 SUB B
|
||
1C99 210100 LD HL,1
|
||
1C9C CAA41C FLGSU2: JP Z,FLGSU3 ;BIT IN POSITION
|
||
1C9F 29 ADD HL,HL
|
||
1CA0 3D DEC A
|
||
1CA1 C39C1C JP FLGSU2
|
||
|
||
1CA4 44 FLGSU3: LD B,H
|
||
1CA5 4D LD C,L
|
||
1CA6 E1 POP HL
|
||
1CA7 56 LD D,(HL)
|
||
1CA8 23 INC HL
|
||
1CA9 5E LD E,(HL)
|
||
1CAA 2B DEC HL
|
||
1CAB C9 RET
|
||
|
||
1CAC 3A9D21 PROPB: LD A,(ARG1) ;BEG OF PROPERTY PART OF OBJECT
|
||
1CAF CDD61C CALL OBJLOC
|
||
1CB2 110700 LD DE,7
|
||
1CB5 19 ADD HL,DE
|
||
1CB6 56 LD D,(HL)
|
||
1CB7 23 INC HL
|
||
1CB8 5E LD E,(HL)
|
||
1CB9 2ABB21 LD HL,(ZCODEP)
|
||
1CBC 19 ADD HL,DE
|
||
1CBD 7E LD A,(HL) ;LENGTH OF DESCRIPTION
|
||
1CBE 87 ADD A,A ;*2
|
||
1CBF 3C INC A ;+1
|
||
1CC0 C3EA1E JP HLOFF ;INDEX AND RETURN
|
||
|
||
1CC3 7E PROPN: LD A,(HL) ;HL HAS REAL PROP POINTER
|
||
1CC4 E61F AND 1FH
|
||
1CC6 C9 RET
|
||
|
||
1CC7 7E PROPL: LD A,(HL) ;PROP LENGTH, HL HAS REAL PROP POINTER
|
||
1CC8 07 RLCA
|
||
1CC9 07 RLCA
|
||
1CCA 07 RLCA
|
||
1CCB E607 AND 7
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 70
|
||
|
||
|
||
1CCD C9 RET
|
||
|
||
1CCE CDC71C PROPNX: CALL PROPL
|
||
1CD1 C602 ADD A,2
|
||
1CD3 C3EA1E JP HLOFF ;NEXT PROP POINTER
|
||
|
||
1CD6 D5 OBJLOC: PUSH DE ;GET OBJECT LOCATION, A HAS OBJECT NUMBER
|
||
1CD7 6F LD L,A
|
||
1CD8 2600 LD H,0
|
||
1CDA 54 LD D,H
|
||
1CDB 5D LD E,L
|
||
1CDC 29 ADD HL,HL
|
||
1CDD 29 ADD HL,HL
|
||
1CDE 29 ADD HL,HL
|
||
1CDF 19 ADD HL,DE
|
||
1CE0 113500 LD DE,53
|
||
1CE3 19 ADD HL,DE ;9*NUMBER + 53
|
||
1CE4 E5 PUSH HL ;OBJECT OFFSET
|
||
1CE5 2ABB21 LD HL,(ZCODEP)
|
||
1CE8 110A00 LD DE,ZOBJEC
|
||
1CEB 19 ADD HL,DE
|
||
1CEC 56 LD D,(HL)
|
||
1CED 23 INC HL
|
||
1CEE 5E LD E,(HL)
|
||
1CEF 2ABB21 LD HL,(ZCODEP)
|
||
1CF2 19 ADD HL,DE
|
||
1CF3 D1 POP DE
|
||
1CF4 19 ADD HL,DE ;REAL ADDRESS
|
||
1CF5 D1 POP DE
|
||
1CF6 C9 RET
|
||
|
||
1CF7 2A9D21 GETARG: LD HL,(ARG1)
|
||
1CFA EB EX DE,HL
|
||
1CFB 2A9F21 LD HL,(ARG2) ;GET BOTH ARGS
|
||
1CFE C9 RET
|
||
|
||
1CFF 7A SHLGED: LD A,D
|
||
1D00 AC XOR H
|
||
1D01 F2071D JP P,HLGEDE ;BOTH OF SAME SIGN
|
||
1D04 7C LD A,H
|
||
1D05 BA CP D ;CARRY WILL BE SET IF D NEG AND THUS LESS THAN H
|
||
1D06 C9 RET
|
||
|
||
1D07 7A HLGEDE: LD A,D ;RETURN WITH CARRY SET IF HL>=DE
|
||
1D08 BC CP H
|
||
1D09 C0 RET NZ
|
||
1D0A 7D LD A,L
|
||
1D0B BB CP E
|
||
1D0C 3F CCF
|
||
1D0D C9 RET
|
||
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 71
|
||
|
||
|
||
1D0E D5 PSHSTK: PUSH DE
|
||
1D0F EB EX DE,HL ;PUSH STACK
|
||
1D10 2AE90D LD HL,(ZSTAKP) ;STACK POINTER
|
||
1D13 2B DEC HL
|
||
1D14 73 LD (HL),E
|
||
1D15 2B DEC HL
|
||
1D16 72 LD (HL),D
|
||
1D17 22E90D LD (ZSTAKP),HL ;SAVE POINTER
|
||
1D1A 218A21 LD HL,ZSTAKC ;COUNT
|
||
1D1D 34 INC (HL)
|
||
1D1E 7E LD A,(HL)
|
||
1D1F FEE0 CP ZSTAKL
|
||
1D21 CC0602 CALL Z,ZER
|
||
1D24 EB EX DE,HL
|
||
1D25 D1 POP DE
|
||
1D26 C9 RET
|
||
; ---------
|
||
; POP STACK
|
||
; ---------
|
||
; POP WORD OFF Z-STACK AND RETURN IT IN HL
|
||
1D27 D5 POPSTK: PUSH DE ;SAVE DE
|
||
1D28 2AE90D LD HL,(ZSTAKP) ;HL <= Z-STACK POINTER
|
||
1D2B 56 LD D,(HL) ;GET MSB OF WORD
|
||
1D2C 23 INC HL
|
||
1D2D 5E LD E,(HL) ;GET LSB OF WORD
|
||
1D2E 23 INC HL
|
||
1D2F 22E90D LD (ZSTAKP),HL ;SAVE NEW Z-STACK POINTER
|
||
1D32 218A21 LD HL,ZSTAKC ;CHECK COUNT
|
||
1D35 35 DEC (HL)
|
||
1D36 CC0602 CALL Z,ZER ;OVER POP ERROR
|
||
1D39 EB EX DE,HL ;VALUE IN HL
|
||
1D3A D1 POP DE ;RESTORE DE
|
||
1D3B C9 RET
|
||
;
|
||
; **********************************************************************
|
||
; * *
|
||
; * ZORK - PAGING ROUTINES *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
1D3C 3AB021 NEXTPC: LD A,(ZPCFLG) ;HAS PAGE MOVED?
|
||
1D3F B7 OR A
|
||
1D40 CA691D JP Z,NXTPC1 ;PAGE HAS MOVED
|
||
1D43 2AAE21 LD HL,(ZPCPNT)
|
||
1D46 46 LD B,(HL) ;GET VALUE IN B
|
||
1D47 23 INC HL
|
||
1D48 22AE21 LD (ZPCPNT),HL ;STORE BACK POINTER
|
||
1D4B 2A8821 LD HL,(ZPCL)
|
||
1D4E 2C INC L
|
||
1D4F 228821 LD (ZPCL),HL ;ASSUME OK AT FIRST
|
||
1D52 78 LD A,B
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 72
|
||
|
||
|
||
1D53 C0 RET NZ ;OK IF L NOT ZERO
|
||
1D54 7C LD A,H ;CROSSED 256 BYTE BOUNDRY
|
||
1D55 24 INC H
|
||
1D56 228821 LD (ZPCL),HL ;AGAIN ASSUME NOT PASSED 256 BOUNTRY
|
||
1D59 B7 OR A
|
||
1D5A 78 LD A,B
|
||
1D5B C8 RET Z ;DID NOT CROSS 512 BOUNDRY
|
||
1D5C AF XOR A
|
||
1D5D 328921 LD (ZPCL+1),A ;0 ZPCL
|
||
1D60 32B021 LD (ZPCFLG),A ;BAD DATA IN PCPNT, WILL HAVE TO FETCH NEW BLOCK
|
||
1D63 218721 LD HL,ZPCH ;INCREMENT ZPC HIGH
|
||
1D66 34 INC (HL)
|
||
1D67 78 LD A,B
|
||
1D68 C9 RET ;RETURN, TROUBLE NEXT TIME
|
||
|
||
1D69 3A8721 NXTPC1: LD A,(ZPCH) ;GET ZPAGE NUMBER
|
||
1D6C 219B21 LD HL,ZMEMT ;TOP OF LOW MEM
|
||
1D6F BE CP (HL)
|
||
1D70 2ABB21 LD HL,(ZCODEP) ;PRELOAD PORTION
|
||
1D73 DA881D JP C,NXTPCL
|
||
1D76 CDF11E CALL FNDPGE
|
||
1D79 32B121 LD (ZPCPG),A ;STORE PAGE
|
||
1D7C DA9B1D JP C,NXTPC2 ;COULD NOT FIND PAGE, SWAP IT IN (OH WHAT A SHAME)
|
||
1D7F CDAB1E NXTPC3: CALL SPLICE ;PUT AT TOP OF LIST
|
||
1D82 3AB121 LD A,(ZPCPG) ;SET UP POINTER TO PAGE
|
||
1D85 2AB921 LD HL,(PGBUFP) ;POINTER TO BEGINNING OF PAGE BUFFERS
|
||
1D88 NXTPCL:
|
||
1D88 87 ADD A,A
|
||
1D89 84 ADD A,H
|
||
1D8A 67 LD H,A
|
||
1D8B EB EX DE,HL ;DE NOW HAS POINTER TO BEG OF BUFFER
|
||
1D8C 2A8821 LD HL,(ZPCL)
|
||
1D8F 19 ADD HL,DE ;ADD IN OFFSET
|
||
1D90 22AE21 LD (ZPCPNT),HL ;ZPCPNT NOW VALID
|
||
1D93 3EFF LD A,0FFH
|
||
1D95 32B021 LD (ZPCFLG),A
|
||
1D98 C33C1D JP NEXTPC ;TRY AGAIN, THIS TIME IT WILL NOT FAIL
|
||
|
||
1D9B 21B821 NXTPC2: LD HL,MPCPG ;CHECK IF DISTROYING MPC
|
||
1D9E BE CP (HL)
|
||
1D9F C2A81D JP NZ,NXTPC4 ;NOT DISTROYING PAGE
|
||
1DA2 47 LD B,A
|
||
1DA3 AF XOR A
|
||
1DA4 32B721 LD (MPCFLG),A
|
||
1DA7 78 LD A,B
|
||
1DA8 2AB921 NXTPC4: LD HL,(PGBUFP)
|
||
1DAB 87 ADD A,A
|
||
1DAC 84 ADD A,H
|
||
1DAD 67 LD H,A ;POINTER TO BEGINNING OF BUFFER
|
||
1DAE 3A8721 LD A,(ZPCH)
|
||
1DB1 CDF702 CALL GETDSK
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 73
|
||
|
||
|
||
1DB4 3AB121 LD A,(ZPCPG)
|
||
1DB7 47 LD B,A
|
||
1DB8 21AB0F LD HL,PGTBL
|
||
1DBB CDEA1E CALL HLOFF
|
||
1DBE 3A8721 LD A,(ZPCH)
|
||
1DC1 77 LD (HL),A ;SET PAGE TABLE ENTRY
|
||
1DC2 78 LD A,B
|
||
1DC3 C37F1D JP NXTPC3 ;PAGE NOW IN MEMORY
|
||
|
||
1DC6 7C SETWRD: LD A,H
|
||
1DC7 B7 OR A
|
||
1DC8 1F RRA
|
||
1DC9 32B221 LD (MPCH),A
|
||
1DCC 7C SETWR1: LD A,H
|
||
1DCD E601 AND 1
|
||
1DCF 67 LD H,A
|
||
1DD0 22B321 LD (MPCL),HL
|
||
1DD3 AF XOR A
|
||
1DD4 32B721 LD (MPCFLG),A
|
||
1DD7 C9 RET
|
||
|
||
1DD8 7C SETSTR: LD A,H
|
||
1DD9 32B221 LD (MPCH),A
|
||
1DDC 29 ADD HL,HL
|
||
1DDD C3CC1D JP SETWR1
|
||
|
||
1DE0 AF GETFRE: XOR A
|
||
1DE1 32B721 LD (MPCFLG),A ;NO MEM PAGE LEFT
|
||
1DE4 3ABF21 LD A,(PGBOT)
|
||
1DE7 32B821 LD (MPCPG),A
|
||
1DEA CD781E CALL CKZPCP
|
||
1DED CDAB1E CALL SPLICE
|
||
1DF0 3AB821 LD A,(MPCPG)
|
||
1DF3 47 LD B,A
|
||
1DF4 2AB921 LD HL,(PGBUFP)
|
||
1DF7 87 ADD A,A
|
||
1DF8 84 ADD A,H
|
||
1DF9 67 LD H,A
|
||
1DFA 22B521 LD (MPCPNT),HL
|
||
1DFD 78 LD A,B
|
||
1DFE 21AB0F LD HL,PGTBL
|
||
1E01 CDEA1E CALL HLOFF
|
||
1E04 3600 LD (HL),0
|
||
1E06 C9 RET
|
||
|
||
1E07 CD121E GETWRD: CALL GETBYT
|
||
1E0A F5 PUSH AF
|
||
1E0B CD121E CALL GETBYT ;GET A FULL WORD
|
||
1E0E 6F LD L,A
|
||
1E0F F1 POP AF
|
||
1E10 67 LD H,A
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 74
|
||
|
||
|
||
1E11 C9 RET
|
||
|
||
1E12 3AB721 GETBYT: LD A,(MPCFLG) ;HAS PAGE MOVED?
|
||
1E15 B7 OR A
|
||
1E16 CA3F1E JP Z,GETBT1 ;PAGE HAS MOVED
|
||
1E19 2AB521 LD HL,(MPCPNT)
|
||
1E1C 46 LD B,(HL) ;GET VALUE IN B
|
||
1E1D 23 INC HL
|
||
1E1E 22B521 LD (MPCPNT),HL ;STORE BACK POINTER
|
||
1E21 2AB321 LD HL,(MPCL)
|
||
1E24 2C INC L
|
||
1E25 22B321 LD (MPCL),HL ;ASSUME OK AT FIRST
|
||
1E28 78 LD A,B
|
||
1E29 C0 RET NZ ;OK IF L NOT ZERO
|
||
1E2A 7C LD A,H ;CROSSED 256 BYTE BOUNDRY
|
||
1E2B 24 INC H
|
||
1E2C 22B321 LD (MPCL),HL ;AGAIN ASSUME NOT PASSED 256 BOUNTRY
|
||
1E2F B7 OR A
|
||
1E30 78 LD A,B
|
||
1E31 C8 RET Z ;DID NOT CROSS 512 BOUNDRY
|
||
1E32 AF XOR A
|
||
1E33 32B421 LD (MPCL+1),A ;0 MPCL
|
||
1E36 32B721 LD (MPCFLG),A ;BAD DATA IN PCPNT, WILL HAVE TO FETCH NEW BLOCK
|
||
1E39 21B221 LD HL,MPCH ;INCREMENT ZPC HIGH
|
||
1E3C 34 INC (HL)
|
||
1E3D 78 LD A,B
|
||
1E3E C9 RET ;RETURN, TROUBLE NEXT TIME
|
||
|
||
1E3F 3A9A21 GETBT1: LD A,(VERF)
|
||
1E42 B7 OR A
|
||
1E43 C2841E JP NZ,GETB1A ;IN VERIFY MODE
|
||
1E46 3AB221 LD A,(MPCH) ;GET MPAGE NUMBER
|
||
1E49 219B21 LD HL,ZMEMT ;TOP OF LOW MEM
|
||
1E4C BE CP (HL)
|
||
1E4D 2ABB21 LD HL,(ZCODEP) ;PRELOAD PORTION
|
||
1E50 DA651E JP C,GETBTL
|
||
1E53 CDF11E CALL FNDPGE
|
||
1E56 32B821 LD (MPCPG),A ;STORE PAGE
|
||
1E59 DA8A1E JP C,GETBT2 ;COULD NOT FIND PAGE, SWAP IT IN (OH WHAT A SHAME)
|
||
1E5C CDAB1E GETBT3: CALL SPLICE ;PUT AT TOP OF LIST
|
||
1E5F 3AB821 LD A,(MPCPG) ;SET UP POINTER TO PAGE
|
||
1E62 2AB921 LD HL,(PGBUFP) ;POINTER TO BEGINNING OF PAGE BUFFERS
|
||
1E65 GETBTL:
|
||
1E65 87 ADD A,A
|
||
1E66 84 ADD A,H
|
||
1E67 67 LD H,A
|
||
1E68 EB EX DE,HL
|
||
1E69 2AB321 LD HL,(MPCL)
|
||
1E6C 19 ADD HL,DE
|
||
1E6D 22B521 LD (MPCPNT),HL
|
||
1E70 3EFF LD A,0FFH
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 75
|
||
|
||
|
||
1E72 32B721 LD (MPCFLG),A
|
||
1E75 C3121E JP GETBYT ;TRY AGAIN, THIS TIME IT WILL NOT FAIL
|
||
|
||
|
||
1E78 21B121 CKZPCP: LD HL,ZPCPG ;CHECK IF DISTROYING ZPC
|
||
1E7B BE CP (HL)
|
||
1E7C C0 RET NZ ;NOT DISTROYING PAGE
|
||
1E7D 47 LD B,A
|
||
1E7E AF XOR A
|
||
1E7F 32B021 LD (ZPCFLG),A
|
||
1E82 78 LD A,B
|
||
1E83 C9 RET
|
||
|
||
1E84 3ABF21 GETB1A: LD A,(PGBOT)
|
||
1E87 32B821 LD (MPCPG),A ;NEW PAGE
|
||
1E8A CD781E GETBT2: CALL CKZPCP
|
||
1E8D 2AB921 LD HL,(PGBUFP)
|
||
1E90 87 ADD A,A
|
||
1E91 84 ADD A,H
|
||
1E92 67 LD H,A ;POINTER TO BEGINNING OF BUFFER
|
||
1E93 3AB221 LD A,(MPCH)
|
||
1E96 CDF702 CALL GETDSK
|
||
1E99 3AB821 LD A,(MPCPG)
|
||
1E9C 47 LD B,A
|
||
1E9D 21AB0F LD HL,PGTBL
|
||
1EA0 CDEA1E CALL HLOFF
|
||
1EA3 3AB221 LD A,(MPCH)
|
||
1EA6 77 LD (HL),A ;SET PAGE TABLE ENTRY
|
||
1EA7 78 LD A,B
|
||
1EA8 C35C1E JP GETBT3 ;PAGE NOW IN MEMORY
|
||
|
||
1EAB 4F SPLICE: LD C,A ;SPLICE PAGE IN A TO TOP OF LIST
|
||
1EAC 3ABE21 LD A,(PGTOP) ;GET OLD TOP
|
||
1EAF B9 CP C
|
||
1EB0 C8 RET Z ;SAME TOP AS LAST
|
||
1EB1 47 LD B,A
|
||
1EB2 79 LD A,C
|
||
1EB3 32BE21 LD (PGTOP),A ;NEW TOP
|
||
1EB6 21EB0F LD HL,PGTBLF
|
||
1EB9 CDEA1E CALL HLOFF
|
||
1EBC 5E LD E,(HL) ;E HAS OLD FORWARD POINTER
|
||
1EBD 70 LD (HL),B ;NEW FORWARD TO OLD TOP
|
||
1EBE 212B10 LD HL,PGTBLB
|
||
1EC1 79 LD A,C
|
||
1EC2 CDEA1E CALL HLOFF
|
||
1EC5 56 LD D,(HL) ;D GETS OLD BACK POINTER
|
||
1EC6 36FF LD (HL),0FFH ;TOP HAS NO BACK
|
||
1EC8 7A LD A,D
|
||
1EC9 21EB0F LD HL,PGTBLF
|
||
1ECC CDEA1E CALL HLOFF
|
||
1ECF 73 LD (HL),E ;PATCH FORWARD POINTER
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 76
|
||
|
||
|
||
1ED0 78 LD A,B
|
||
1ED1 212B10 LD HL,PGTBLB
|
||
1ED4 CDEA1E CALL HLOFF
|
||
1ED7 71 LD (HL),C
|
||
1ED8 7B LD A,E
|
||
1ED9 3C INC A
|
||
1EDA CAE51E JP Z,SPLIC1 ;WAS LAST BLOCK WITHOUT FORWARD POINTER
|
||
1EDD 212A10 LD HL,PGTBLB-1 ;OFFSET INC A
|
||
1EE0 CDEA1E CALL HLOFF
|
||
1EE3 72 LD (HL),D ;SPLICE BACK POINTER
|
||
1EE4 C9 RET
|
||
|
||
1EE5 7A SPLIC1: LD A,D
|
||
1EE6 32BF21 LD (PGBOT),A ;NEW BOTTOM OF LIST
|
||
1EE9 C9 RET
|
||
|
||
1EEA HLOFF:
|
||
1EEA 85 ADD A,L ;INDIRECT HL THROUGH A
|
||
1EEB 6F LD L,A
|
||
1EEC 3E00 LD A,0
|
||
1EEE 8C ADC A,H
|
||
1EEF 67 LD H,A
|
||
1EF0 C9 RET
|
||
|
||
1EF1 21BD21 FNDPGE: LD HL,NPGS ;FIND PAGE IN A, RETURN WITH CARRY
|
||
1EF4 ;SET IF NOT FOUND. A WILL HAVE FOUND PAGE OR
|
||
1EF4 ;BOTTOM OF PAGE LIST
|
||
1EF4 46 LD B,(HL)
|
||
1EF5 0E00 LD C,0
|
||
1EF7 21AB0F LD HL,PGTBL
|
||
1EFA BE FNDPGL: CP (HL)
|
||
1EFB CA091F JP Z,FNDPG1 ;SUCCESS
|
||
1EFE 0C INC C
|
||
1EFF 23 INC HL
|
||
1F00 05 DEC B
|
||
1F01 C2FA1E JP NZ,FNDPGL
|
||
1F04 3ABF21 LD A,(PGBOT) ;NOT FOUND
|
||
1F07 37 SCF ;SET CARRY AND RETURN BOTTOM
|
||
1F08 C9 RET
|
||
|
||
1F09 79 FNDPG1: LD A,C
|
||
1F0A C9 RET ;CARRY WILL BE CLEARED
|
||
;
|
||
; **********************************************************************
|
||
; * *
|
||
; * ZORK - STRING ROUTINES *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
; ---------------
|
||
; PRINT Z-STRING
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 77
|
||
|
||
|
||
; ---------------
|
||
1F0B AF PZSTR: XOR A ;PRINT ZSTRING POINTED TO BY MPC (NOT REENTRENT)
|
||
1F0C 32C121 LD (CSPERM),A ;PERMANENT CHARSET
|
||
1F0F 32C221 LD (STBYTF),A ;RESET STRING BYTE FLAG
|
||
1F12 3D DEC A
|
||
1F13 32C021 LD (CSTEMP),A ;NO TEMP CHARSET IN EFFECT
|
||
|
||
1F16 CD3120 PZSTRL: CALL GETZCH ;GET A Z-CHARACTER
|
||
1F19 D8 RET C ;END OF STRING IF CARRY SET
|
||
1F1A 47 LD B,A
|
||
1F1B B7 OR A
|
||
1F1C CAD11F JP Z,PZSTRS ;0=SPACE
|
||
1F1F FE04 CP 4 ;IS THIS AN F-WORD?
|
||
1F21 DA701F JP C,PZFWRD ; YES.
|
||
1F24 FE06 CP 6 ;IS IT A SHIFT CHAR?
|
||
1F26 DAE91F JP C,PZSTRP ; YES. CHANGE CHAR SET
|
||
1F29 CD2020 CALL GETMOD
|
||
1F2C B7 OR A ;IS IT CHARSET 0?
|
||
1F2D C23A1F JP NZ,PZSTR1 ; NOPE.
|
||
|
||
;PRINT LOWER CASE CHAR (CHARSET 0)
|
||
1F30 3E5B LD A,'a'-6 ;ASCII "a" MINUS Z-OFFSET
|
||
1F32 PZSTP0:
|
||
1F32 80 ADD A,B ;ADD CHARACTER
|
||
1F33 4F LD C,A
|
||
1F34 CDB604 PZSTP1: CALL COUT ;PRINT RESULT
|
||
1F37 C3161F JP PZSTRL ;AND FETCH ANOTHER Z-CHAR
|
||
|
||
;CHARSET 1 OR 2?
|
||
1F3A 3D PZSTR1: DEC A ;SET 1?
|
||
1F3B C2431F JP NZ,PZSTR2 ; NOPE, IT'S SET 2
|
||
|
||
;PRINT UPPER-CASE CHAR (CHARSET 1)
|
||
1F3E 3E3B LD A,'A'-6 ;ASCII "A" MINUS Z-OFFSET
|
||
1F40 C3321F JP PZSTP0 ;PROCESS IT
|
||
|
||
;DECODE/PRINT CHARSET 2
|
||
1F43 78 PZSTR2: LD A,B ;MODE 2
|
||
1F44 FE06 CP 6 ;DIRECT ASCII CHARACTER?
|
||
1F46 CA581F JP Z,PZSTRA ; YES.
|
||
1F49 FE07 CP 7 ;CARRIAGE RETURN?
|
||
1F4B CAD61F JP Z,PZSTRC ; YES.
|
||
1F4E 210020 LD HL,CHRTBL-8 ; NO. SUBTRACT OFFSET
|
||
1F51 CDEA1E CALL HLOFF
|
||
1F54 4E LD C,(HL) ;GET CHARACTER FROM TABLE
|
||
1F55 C3341F JP PZSTP1
|
||
|
||
1F58 CD3120 PZSTRA: CALL GETZCH ;FORM CHARACTER FROM TWO BYTES
|
||
1F5B 0F RRCA
|
||
1F5C 0F RRCA
|
||
1F5D 0F RRCA
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 78
|
||
|
||
|
||
1F5E 4F LD C,A
|
||
1F5F C5 PUSH BC
|
||
1F60 CD3120 CALL GETZCH
|
||
1F63 C1 POP BC
|
||
1F64 81 ADD A,C
|
||
1F65 4F LD C,A
|
||
1F66 FE09 CP 9 ;TAB?
|
||
1F68 C2341F JP NZ,PZSTP1
|
||
1F6B 0E20 LD C,20H
|
||
1F6D C3341F JP PZSTP1 ;PRINT IT
|
||
|
||
1F70 3D PZFWRD: DEC A
|
||
1F71 87 ADD A,A
|
||
1F72 87 ADD A,A
|
||
1F73 87 ADD A,A
|
||
1F74 87 ADD A,A
|
||
1F75 87 ADD A,A ;SET NUMBER -1 TIMES 32
|
||
1F76 32A921 LD (FWSET),A
|
||
1F79 CD3120 CALL GETZCH ;GET STRING NUMBER
|
||
1F7C D8 RET C ;BAD IF OUT OF CHARACTERS
|
||
1F7D 47 LD B,A
|
||
1F7E 3AC121 LD A,(CSPERM) ;PRINT ZSTRING POINTED TO BY MPC
|
||
1F81 67 LD H,A ;MAKE IT REENTERENT
|
||
1F82 3AC221 LD A,(STBYTF)
|
||
1F85 6F LD L,A
|
||
1F86 E5 PUSH HL
|
||
1F87 2AC321 LD HL,(ZSTWRD)
|
||
1F8A E5 PUSH HL
|
||
1F8B 2AB321 LD HL,(MPCL)
|
||
1F8E E5 PUSH HL
|
||
1F8F 2AB221 LD HL,(MPCH)
|
||
1F92 E5 PUSH HL
|
||
1F93 2AAA21 LD HL,(FWORDS)
|
||
1F96 3AA921 LD A,(FWSET)
|
||
1F99 80 ADD A,B ;ENTRY INTO 96 WORD TABLE
|
||
1F9A 87 ADD A,A
|
||
1F9B CDEA1E CALL HLOFF ;POINTER TO SPECIAL STRING
|
||
1F9E 7E LD A,(HL)
|
||
1F9F 32B221 LD (MPCH),A
|
||
1FA2 23 INC HL
|
||
1FA3 6E LD L,(HL)
|
||
1FA4 2600 LD H,0
|
||
1FA6 29 ADD HL,HL
|
||
1FA7 22B321 LD (MPCL),HL ;SET NEW MPC
|
||
1FAA AF XOR A
|
||
1FAB 32B721 LD (MPCFLG),A ;MPCPNT NOT VALID
|
||
1FAE CD0B1F CALL PZSTR ;PRINT SUB STRING (REENTRENT VERSION)
|
||
1FB1 AF XOR A ;RESTORE REENTRENT VALUES
|
||
1FB2 32B721 LD (MPCFLG),A
|
||
1FB5 E1 POP HL
|
||
1FB6 7D LD A,L
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 79
|
||
|
||
|
||
1FB7 32B221 LD (MPCH),A
|
||
1FBA E1 POP HL
|
||
1FBB 22B321 LD (MPCL),HL
|
||
1FBE E1 POP HL
|
||
1FBF 22C321 LD (ZSTWRD),HL
|
||
1FC2 E1 POP HL
|
||
1FC3 7C LD A,H
|
||
1FC4 32C121 LD (CSPERM),A
|
||
1FC7 7D LD A,L
|
||
1FC8 32C221 LD (STBYTF),A
|
||
1FCB CD2020 CALL GETMOD
|
||
1FCE C3161F JP PZSTRL
|
||
|
||
1FD1 0E20 PZSTRS: LD C,20H
|
||
1FD3 C3341F JP PZSTP1 ;PRINT SPACE
|
||
|
||
1FD6 0E0D PZSTRC: LD C,0DH ;CR-LF
|
||
1FD8 CDB604 CALL COUT
|
||
1FDB 0E0A LD C,0AH
|
||
1FDD C3341F JP PZSTP1
|
||
|
||
1FE0 78 PZSTRT: LD A,B ;SET TEMP MODE
|
||
1FE1 D603 SUB 3
|
||
1FE3 32C021 LD (CSTEMP),A
|
||
1FE6 C3161F JP PZSTRL
|
||
|
||
1FE9 CD2020 PZSTRP: CALL GETMOD ;SET CHAR MODE
|
||
1FEC B7 OR A ;MODE 0 IS TEMPORARY
|
||
1FED CAE01F JP Z,PZSTRT
|
||
1FF0 3D DEC A
|
||
1FF1 87 ADD A,A
|
||
1FF2 80 ADD A,B
|
||
1FF3 D604 SUB 4 ;INDEX INTO PERMTB
|
||
1FF5 E5 PUSH HL
|
||
1FF6 210420 LD HL,PERMTB
|
||
1FF9 CDEA1E CALL HLOFF
|
||
1FFC 7E LD A,(HL)
|
||
1FFD E1 POP HL
|
||
1FFE 32C121 LD (CSPERM),A
|
||
2001 C3161F JP PZSTRL
|
||
|
||
2004 01000002 PERMTB: DB 1,0,0,2
|
||
|
||
2008 30313233 CHRTBL: DB '0123456789.,!?_#'
|
||
2018 2722 DB $27,$22
|
||
201A 2F5C2D3A DB '/\-:()'
|
||
|
||
2020 3AC021 GETMOD: LD A,(CSTEMP)
|
||
2023 3C INC A
|
||
2024 3AC121 LD A,(CSPERM)
|
||
2027 C8 RET Z ;RETURN WITH PERM MODE IF NO TEMP MODE
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 80
|
||
|
||
|
||
2028 E5 PUSH HL
|
||
2029 21C021 LD HL,CSTEMP
|
||
202C 7E LD A,(HL)
|
||
202D 36FF LD (HL),0FFH ;CLEAR MODE AFTER GETTING IT
|
||
202F E1 POP HL
|
||
2030 C9 RET
|
||
|
||
2031 3AC221 GETZCH: LD A,(STBYTF) ;FIND OUT WHICH BYTE
|
||
2034 B7 OR A
|
||
2035 37 SCF
|
||
2036 F8 RET M ;OUT OF CHARACTERS
|
||
2037 C24A20 JP NZ,GETZH1 ;NOT FIRST BYTE
|
||
203A 3C INC A
|
||
203B 32C221 LD (STBYTF),A
|
||
203E CD071E CALL GETWRD
|
||
2041 22C321 LD (ZSTWRD),HL ;SAVE WORD
|
||
2044 7C LD A,H
|
||
2045 0F RRCA
|
||
2046 0F RRCA
|
||
2047 E61F AND 1FH
|
||
2049 C9 RET
|
||
|
||
204A 3D GETZH1: DEC A
|
||
204B C25D20 JP NZ,GETZH2 ;LAST CHAR IN WORD
|
||
204E 3E02 LD A,2
|
||
2050 32C221 LD (STBYTF),A
|
||
2053 2AC321 LD HL,(ZSTWRD)
|
||
2056 29 ADD HL,HL
|
||
2057 29 ADD HL,HL
|
||
2058 29 ADD HL,HL
|
||
2059 7C LD A,H
|
||
205A E61F AND 1FH
|
||
205C C9 RET
|
||
|
||
205D AF GETZH2: XOR A
|
||
205E 32C221 LD (STBYTF),A
|
||
2061 2AC321 LD HL,(ZSTWRD)
|
||
2064 7C LD A,H
|
||
2065 B7 OR A
|
||
2066 F26E20 JP P,GETZH3 ;NOT LAST CHAR IN STRING
|
||
2069 3EFF LD A,0FFH
|
||
206B 32C221 LD (STBYTF),A ;INDICATE END OF STRING
|
||
206E 7D GETZH3: LD A,L
|
||
206F E61F AND 1FH
|
||
2071 C9 RET
|
||
|
||
2072 AF CONZST: XOR A ;CONVERT TO Z STRING
|
||
2073 32C121 LD (CSPERM),A
|
||
2076 21C521 LD HL,ZSTBUO ;POINTER TO OUTPUT BUFFER
|
||
2079 0606 LD B,6 ;OUTPUT 6 CHARACTERS TO CONVERT
|
||
207B 3605 CONZSL: LD (HL),5
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 81
|
||
|
||
|
||
207D 23 INC HL
|
||
207E 05 DEC B
|
||
207F C27B20 JP NZ,CONZSL ;FILL BUFFER WITH PAD CHARACTERS
|
||
2082 0606 LD B,6
|
||
2084 11C521 LD DE,ZSTBUO ;OUTPUT
|
||
2087 219221 LD HL,ZSTBUI ;INPUT
|
||
208A 4E CNZSL1: LD C,(HL)
|
||
208B 23 INC HL
|
||
208C 79 LD A,C
|
||
208D B7 OR A
|
||
208E 3E05 LD A,5
|
||
2090 CABF20 JP Z,CNZSLO ;BLANKS
|
||
2093 79 LD A,C
|
||
2094 FE20 CP ' '
|
||
2096 3E00 LD A,0
|
||
2098 CABF20 JP Z,CNZSLO ;SPACE
|
||
209B D5 CNZSL2: PUSH DE
|
||
209C 79 LD A,C
|
||
209D CD1D21 CALL ZCHRCS ;WHICH CHARACTER SET
|
||
20A0 5F LD E,A ;E HAS CHARACTER SET OF CURRENT CHAR
|
||
20A1 3AC121 LD A,(CSPERM)
|
||
20A4 BB CP E
|
||
20A5 CAB320 JP Z,CNZSLC ;CONVERT THEN OUTPUT
|
||
20A8 7B LD A,E
|
||
20A9 C603 ADD A,3
|
||
20AB D1 POP DE
|
||
20AC 12 LD (DE),A ;OUTPUT TEMP SHIFT
|
||
20AD 13 INC DE
|
||
20AE 05 DEC B
|
||
20AF CA3C21 JP Z,CNZSLE
|
||
20B2 D5 PUSH DE
|
||
20B3 79 CNZSLC: LD A,C
|
||
20B4 D1 POP DE
|
||
20B5 CD1D21 CALL ZCHRCS
|
||
20B8 3D DEC A
|
||
20B9 F2C820 JP P,CNZSC1 ;NOT LOWER CASE
|
||
20BC 79 LD A,C
|
||
20BD D65B SUB 'a'-6
|
||
20BF 12 CNZSLO: LD (DE),A
|
||
20C0 13 INC DE
|
||
20C1 05 DEC B
|
||
20C2 C28A20 JP NZ,CNZSL1 ;NEXT
|
||
20C5 C33C21 JP CNZSLE ;END
|
||
|
||
20C8 C2D120 CNZSC1: JP NZ,CNZSC3 ;NOT UPPER CASE
|
||
20CB 79 LD A,C
|
||
20CC D63B SUB 'A'-6
|
||
20CE C3BF20 JP CNZSLO
|
||
|
||
20D1 79 CNZSC3: LD A,C
|
||
20D2 FE0D CP 0DH
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 82
|
||
|
||
|
||
20D4 C2E320 JP NZ,CNZSC4
|
||
20D7 7E LD A,(HL)
|
||
20D8 FE0A CP 0AH
|
||
20DA C2E320 JP NZ,CNZSC4
|
||
20DD 23 INC HL
|
||
20DE 3E07 LD A,7
|
||
20E0 C3BF20 JP CNZSLO ;CR-LF
|
||
|
||
20E3 79 CNZSC4: LD A,C
|
||
20E4 CD0421 CALL CNZS2M
|
||
20E7 C2BF20 JP NZ,CNZSLO ;FOUND IN TABLE
|
||
20EA 3E06 LD A,6
|
||
20EC 12 LD (DE),A
|
||
20ED 13 INC DE
|
||
20EE 05 DEC B
|
||
20EF CA3C21 JP Z,CNZSLE ;STORE ASCII VERSION
|
||
20F2 79 LD A,C
|
||
20F3 07 RLCA
|
||
20F4 07 RLCA
|
||
20F5 07 RLCA
|
||
20F6 E603 AND 3
|
||
20F8 12 LD (DE),A
|
||
20F9 13 INC DE
|
||
20FA 05 DEC B
|
||
20FB CA3C21 JP Z,CNZSLE
|
||
20FE 79 LD A,C
|
||
20FF E61F AND 1FH
|
||
2101 C3BF20 JP CNZSLO
|
||
|
||
2104 C5 CNZS2M: PUSH BC
|
||
2105 E5 PUSH HL
|
||
2106 211F20 LD HL,CHRTBL+23 ;SEARCH TABLE
|
||
2109 0618 LD B,24
|
||
210B BE CNZS2L: CP (HL)
|
||
210C CA1721 JP Z,CNZS2P ;FOUND
|
||
210F 2B DEC HL
|
||
2110 05 DEC B
|
||
2111 C20B21 JP NZ,CNZS2L
|
||
2114 E1 POP HL ;NOT FOUND
|
||
2115 C1 POP BC
|
||
2116 C9 RET ;FAIL, ZERO SET
|
||
|
||
2117 78 CNZS2P: LD A,B
|
||
2118 C607 ADD A,7
|
||
211A E1 POP HL
|
||
211B C1 POP BC
|
||
211C C9 RET ;PASSED, ZERO CLEARED
|
||
|
||
211D FE61 ZCHRCS: CP 'a'
|
||
211F DA2921 JP C,ZCHRC1
|
||
2122 FE7B CP 'z'+1
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 83
|
||
|
||
|
||
2124 D22921 JP NC,ZCHRC1
|
||
2127 AF XOR A
|
||
2128 C9 RET ;SET 0
|
||
|
||
2129 FE41 ZCHRC1: CP 'A'
|
||
212B DA3621 JP C,ZCHRC2
|
||
212E FE5B CP 'Z'+1
|
||
2130 D23621 JP NC,ZCHRC2
|
||
2133 3E01 LD A,1
|
||
2135 C9 RET
|
||
|
||
2136 B7 ZCHRC2: OR A
|
||
2137 C8 RET Z
|
||
2138 F8 RET M ;END
|
||
2139 3E02 LD A,2
|
||
213B C9 RET ;ELSE SET 2
|
||
|
||
213C 01C521 CNZSLE: LD BC,ZSTBUO ;CONVERT OUTPUT STRING
|
||
213F 210000 LD HL,0
|
||
2142 54 LD D,H
|
||
2143 CD5F21 CALL CNZSE1
|
||
2146 CD5F21 CALL CNZSE1
|
||
2149 CD5F21 CALL CNZSE1
|
||
214C 22C521 LD (ZSTBUO),HL
|
||
214F 210100 LD HL,1
|
||
2152 CD5F21 CALL CNZSE1
|
||
2155 CD5F21 CALL CNZSE1
|
||
2158 CD5F21 CALL CNZSE1
|
||
215B 22C721 LD (ZSTBUO+2),HL
|
||
215E C9 RET
|
||
|
||
215F 0A CNZSE1: LD A,(BC)
|
||
2160 03 INC BC
|
||
2161 5F LD E,A
|
||
2162 29 ADD HL,HL
|
||
2163 29 ADD HL,HL
|
||
2164 29 ADD HL,HL
|
||
2165 29 ADD HL,HL
|
||
2166 29 ADD HL,HL
|
||
2167 19 ADD HL,DE
|
||
2168 C9 RET
|
||
;
|
||
; **********************************************************************
|
||
; * *
|
||
; * ZORK - DATA SECTION *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
2169 SRND: ;RANDOM INFO FOR SAVE, KEEP TOGETHER
|
||
2169 LOCALS: DS 15*2 ;STORAGE FOR LOCALS
|
||
2187 00 ZPCH: DB 0 ;HIGH ORDER 8 BITS OF ZPC
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 84
|
||
|
||
|
||
2188 0000 ZPCL: DW 0 ;LOW ORDER 9 BITS OF ZPC
|
||
218A 01 ZSTAKC: DB 1 ;STACK COUNT, 1=>0 IMPLIES OVERPOP, NEG=> OVER PUSH
|
||
218B 0000 OZSTKP: DW 0 ;OLD ZSTACK POINTER
|
||
218D 00 OZSTKC: DB 0 ;OLD ZSTACK COUNT
|
||
;
|
||
218E 6A573C99 SHIFT: DB 6AH,57H,3CH,99H
|
||
0029 SRNDC EQU $-SRND
|
||
2192 ZSTBUI: DS 6 ;ZSTR INPUT BUFFER
|
||
2198 FF DB 0FFH ;END MARKER
|
||
2199 01 NOLPT: DB 1 ;NON ZERO IMPLIES DO NOT USE LPT
|
||
219A 00 VERF: DB 0 ;1 IF IN VERIFY MODE.
|
||
219B 01 ZMEMT: DB 1 ;FIRST PAGE IN SWAPPING SPACE
|
||
|
||
219C PURSTP: ;END OF PURE
|
||
|
||
219C 00 SIGNF: DB 0 ;STORAGE FOR SIGN IN MULT AND DIVIDE
|
||
219D 0000 ARG1: DW 0 ;OPERRAND 1
|
||
219F 0000 ARG2: DW 0 ;" 2
|
||
21A1 0000 ARG3: DW 0 ;" 3
|
||
21A3 0000 ARG4: DW 0 ;" 4
|
||
21A5 00 ARGCNT: DB 0 ;ARG COUNT
|
||
21A6 00 OPCODE: DB 0 ;CURRENT OPCODE
|
||
21A7 0000 GLOBAL: DW 0 ;POINTER TO GLOBAL 0
|
||
21A9 00 FWSET: DB 0 ;TEMPORARY STORAGE FOR FWORDS CALCULATION
|
||
21AA 0000 FWORDS: DW 0 ;COMMON WORDS POINTER
|
||
21AC 0000 ZPCOFF: DW 0 ;OFFSET FOR FAST JUMPS
|
||
21AE 0000 ZPCPNT: DW 0 ;REAL POINTER TO PC
|
||
21B0 00 ZPCFLG: DB 0 ;0FFH IF VALID PC POINTER
|
||
21B1 00 ZPCPG: DB 0 ;PAGE OF ZPC
|
||
21B2 00 MPCH: DB 0 ;HIGH ORDER 8 BITS OF MEMORY POINTER
|
||
21B3 0000 MPCL: DW 0 ;LOW ORDER 9 BITS OF MEMPOINTER
|
||
21B5 0000 MPCPNT: DW 0 ;REAL POINTER TO MEMORY LOCATION
|
||
21B7 00 MPCFLG: DB 0 ;0FF IF VALID MPCPNT
|
||
21B8 00 MPCPG: DB 0 ;PAGE NUMBER OF PC PAGE
|
||
;
|
||
;PAGE TABLES
|
||
21B9 0000 PGBUFP: DW 0 ;BUFFER POINTER
|
||
21BB 0000 ZCODEP: DW 0 ;LOW MEM STARTING POINTER
|
||
;
|
||
21BD 00 NPGS: DB 0 ;NUMBER OF PAGES
|
||
21BE 00 PGTOP: DB 0 ;TOP OF LIST PAGE
|
||
21BF 3F PGBOT: DB MAXPGS-1 ;BOTTOM OF LIST
|
||
;
|
||
21C0 00 CSTEMP: DB 0 ;-1 IF NOT TEMP CHAR SET, ELSE SET
|
||
21C1 00 CSPERM: DB 0 ;PERM CHARACTER SET
|
||
21C2 00 STBYTF: DB 0 ;0 FOR FIRST BYTE, 1 FOR 2, 2 FOR 3, 0FFH FOR END
|
||
21C3 0000 ZSTWRD: DW 0 ;WORD STORRAGE
|
||
21C5 ZSTBUO: DS 6 ;OUTPUT BUFFER
|
||
21CB 0000 RTABP: DW 0 ;TEMP FOR ZREAD, RESULT TABLE POINTER
|
||
;
|
||
21CD 0000 LMEMRY: DW 0 ;LAST LOCATION IN MEMORY, FILLED IN BY LOADER
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 85
|
||
|
||
|
||
;
|
||
0100 END START
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 86
|
||
---- SYMBOL TABLE ----
|
||
|
||
ARG1 219D COUTDC 0BC7 FLGSU3 1CA4 GETVOC 1AB6 LOC 1555
|
||
ARG2 219F CPLMAX 0085 FLSLIN 04F7 GETVR1 12E4 LOCALS 2169
|
||
ARG3 21A1 CPMBUF 0080 FLUSHW 1A81 GETVRG 12F8 LPCHK 049B
|
||
ARG4 21A3 CPMCLF 010D FNDAT 02C7 GETVRL 12E9 LPDL 0190
|
||
ARGCNT 21A5 CPMCPL 0103 FNDPG1 1F09 GETVRS 1304 LPINIT 05B4
|
||
BADOP 15A1 CPMCR 007C FNDPGE 1EF1 GETWRD 1E07 LPTO 0586
|
||
BAND 16F0 CPMDRV 005C FNDPGL 1EFA GETZCH 2031 LSTADR 0006
|
||
BCOM 167E CPMFCB 005C FNPRE 02DF GETZH1 204A MAKEF 0016
|
||
BDOS 0005 CPMFEX 0065 FNPUR 02D3 GETZH2 205D MAXPGS 0040
|
||
BODY 1088 CPMFN 0105 FRSTQ1 1544 GETZH3 206E MEMTOP 0209
|
||
BOR 16E4 CPMFNB 005D FSET 170B GLOBAL 21A7 MEMTP1 0212
|
||
BRKTBL 1AC5 CPMINV 010F FSETQ 16FC GRTRQ 1697 MLOOP 11F2
|
||
BSTLIN 0152 CPMLLF 010E FSTACK 14B7 GTDSK1 0326 MORCNT 0C58
|
||
BTST 16D2 CPMLPP 0104 FWFAIL 1B54 HLGEDE 1D07 MORE 0701
|
||
CCI 0001 CPMRCD 0019 FWL1 1AED HLOFF 1EEA MORE1 0722
|
||
CCO 0002 CPMRDS 000D FWL1A 1AE9 IGRTQ1 16B5 MORMSG 06E2
|
||
CDIO 0006 CPMREC 007D FWL2 1AF2 IGRTRQ 16AE MOVE 1733
|
||
CDISK 0004 CPMSEL 000E FWL3 1B07 INC 1575 MOVESG 0012
|
||
CGCONS 000B CPMSTR 0200 FWL4 1B1C INC1 1581 MOVIT 034B
|
||
CHARS 0BD0 CPSTNG 0009 FWL4A 1B4A INC2 1588 MPCFLG 21B7
|
||
CHRPNT 0C55 CRCBUF 000A FWL4B 1B49 INQ 16BE MPCH 21B2
|
||
CHRPOS 06A3 CRESET 0000 FWL4C 1B48 IOBYTE 0003 MPCL 21B3
|
||
CHRTBL 2008 CRLF 14C0 FWORDS 21AA ITRMST 0110 MPCPG 21B8
|
||
CIN 0438 CRMSG 0930 FWSET 21A9 JUMP 1660 MPCPNT 21B5
|
||
CIN1 043B CSPERM 21C1 FWSUCC 1B58 LESSQ 168A MSGCRC 0A64
|
||
CIN2 0451 CSTEMP 21C0 GET 175F LFILC 0BB7 MSGOUT 0A48
|
||
CKZPCP 1E78 DBUFP 0BCD GETARG 1CF7 LFILD 0B75 MSGRES 0924
|
||
CLEARS 0585 DDIV0 1C36 GETB 1771 LFILD1 0B81 MUL 1833
|
||
CLO 0005 DDIV1 1C3C GETB1A 1E84 LFILDG 0932 MUL1 1851
|
||
CLOSE 0010 DEC 157B GETBT1 1E3F LFILDM 096F MUL2 185A
|
||
CNZS2L 210B DEC1 158E GETBT2 1E8A LFILF 0B6E MUL4 1857
|
||
CNZS2M 2104 DELETE 0013 GETBT3 1E5C LFILGM 09BF MULT 1BFE
|
||
CNZS2P 2117 DIV 185F GETBTL 1E65 LFILP 0B95 MULT1 1C04
|
||
CNZSC1 20C8 DIV2 1880 GETBYT 1E12 LFILP1 0BA1 MULT2 1C10
|
||
CNZSC3 20D1 DIV2A 188E GETDK2 0318 LFILPM 0997 NBRKS 000A
|
||
CNZSC4 20E3 DIV2B 1881 GETDSK 02F7 LFILR 0BB5 NCHARS 0BCF
|
||
CNZSE1 215F DIV4 1887 GETFRE 1DE0 LFILS 0B45 NEXTP 17F6
|
||
CNZSL1 208A DIVIDE 1C27 GETLNG 12CF LFILS1 0B52 NEXTP1 1800
|
||
CNZSL2 209B DLESSQ 16A3 GETMOD 2020 LINFUL 0521 NEXTP2 1814
|
||
CNZSLC 20B3 EQUALQ 18A4 GETP 1785 LINOCR 0574 NEXTP3 181A
|
||
CNZSLE 213C EQUAQ1 18C5 GETP1 1788 LINOT1 0516 NEXTPC 1D3C
|
||
CNZSLO 20BF ESTLIN 0173 GETP2 17B9 LINOT2 0528 NEXTQ 152F
|
||
CONZSL 207B FALSE 0000 GETP2A 17CB LINOT3 0532 NOLPT 2199
|
||
CONZST 2072 FBRK 1AA5 GETP3 179C LINOT4 055E NPGS 21BD
|
||
CORET 04F3 FCLEAR 1718 GETPRE 0315 LINOT5 0566 NXTPC1 1D69
|
||
COUT 04B6 FILTYP 0C57 GETPT 17D1 LINOT6 0549 NXTPC2 1D9B
|
||
COUT1 04D3 FINDW 1ACF GETPT1 17D4 LINOT7 0555 NXTPC3 1D7F
|
||
COUT2 04CE FIRSTQ 153B GETPT2 17E8 LINOTR 0572 NXTPC4 1DA8
|
||
COUTBS 03B1 FLAGSU 1C82 GETSHT 12C6 LINOUT 0502 NXTPCL 1D88
|
||
COUTCR 04AE FLGSU1 1C94 GETVAR 12DC LMEMRY 21CD OBJLOC 1CD6
|
||
COUTD 045E FLGSU2 1C9C GETVL1 12F1 LMORE 001F OP0 1262
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 87
|
||
---- SYMBOL TABLE ----
|
||
|
||
OP0M 000E PREDS 1362 PZSTRT 1FE0 SAVE1 07E4 UPPER 0903
|
||
OP0T 13D6 PRFLG 0BC9 QUIT 0749 SAVEA 07BA USL 14C6
|
||
OP1 126F PRINT 1669 RANDOM 1BAF SCOREG 0011 VALUE 1675
|
||
OP1M 0010 PRINT1 166F RBRK1 1A99 SCPLOC 0BCA VARGET 133B
|
||
OP1T 13F2 PRINT2 159B RBRK2 1AA2 SCPVAL 0BCC VARGTS 1340
|
||
OP2 1298 PRINTB 1598 RBRKQ 1A8F SETFIL 02AA VARPTR 172D
|
||
OP2EX 12B9 PRINTC 1B66 RD0PL 1A09 SETFL1 02BF VARPTS 134B
|
||
OP2M 0019 PRINTD 15FA RDBFC1 03F9 SETSTR 1DD8 VARPUT 1347
|
||
OP2T 1412 PRINTI 1467 RDBFC2 03EF SETWR1 1DCC VERF 219A
|
||
OPCODE 21A6 PRINTN 1B70 RDBFC3 03DE SETWRD 1DC6 VERIFL 14F5
|
||
OPDSPH 1251 PRINTR 1499 RDBFC4 03E6 SFAIL 082B VERIFY 14CC
|
||
OPEN 000F PRNTDC 1603 RDBFCR 03C0 SFAIL1 0856 VRLINE 107C
|
||
OPEXT 120B PRNTI1 146D RDBFFL 041A SHIFT 218E VRS 106B
|
||
OPEXTF 123F PRNTN1 1B80 RDBFR1 0407 SHLGED 1CFF WARM 0000
|
||
OPEXTL 1214 PRNTN3 1B90 RDBFR2 0415 SIBRKQ 1AA8 WHOLIN 05C1
|
||
OPEXTM 000A PRNTN4 1B95 RDBFRO 03A3 SIGNC 1C5A WHOLN1 0645
|
||
OPEXTT 1444 PRNTN6 1BA2 RDBFRT 03FE SIGNCN 1C6D WHOLN2 0614
|
||
OPNDK1 021B PRNTNC 1B79 RDFLG 0BC8 SIGNF 219C WHOLT 0653
|
||
OZSTKC 218D PRNTNG 1BA7 READB1 036B SIGNPC 1C75 WHOLT0 066C
|
||
OZSTKP 218B PROPB 1CAC READB2 0398 SIGNS 1C67 WHOLT1 0674
|
||
PCPST 0294 PROPL 1CC7 READBF 0354 SPLIC1 1EE5 WHOLT2 0698
|
||
PCPSTL 0295 PROPN 1CC3 READL 19E8 SPLICE 1EAB WHOMSG 06D3
|
||
PCRLD1 048B PROPNX 1CCE READL2 1A33 SRCLOS 0806 WHOTMS 06DB
|
||
PCRLF 04B4 PSHSTK 1D0E READL3 1A56 SRDFNM 02EB WRITER 0022
|
||
PCRLFD 0473 PSTUPS 0194 READR 0021 SRFAIL 083E WRITES 0015
|
||
PCSTR 027E PTSIZE 1565 READS 0014 SRGDFN 0916 ZADD 1820
|
||
PCSTRL 027F PURSTP 219C REMOVC 15AA SRGFM1 08AA ZCALL 18D1
|
||
PDL 0C59 PUT 195D REMOVE 15A4 SRGFN2 08CF ZCALL1 1910
|
||
PERMTB 2004 PUTB 1976 REMVC1 15D7 SRGFN3 090C ZCALL2 192E
|
||
PGBOT 21BF PUTBYT 130A REMVC2 15EF SRGFNA 08E2 ZCALL3 193C
|
||
PGBUFP 21B9 PUTP 198A REST1 0B11 SRGFNB 08FD ZCALL4 194A
|
||
PGTBD 0080 PUTP1 198D RESTA 0AC2 SRGFNM 0860 ZCHRC1 2129
|
||
PGTBL 0FAB PUTP2 19A1 RESTAR 0757 SRMSG1 09EA ZCHRC2 2136
|
||
PGTBLB 102B PUTP2A 19B7 RESTOR 0A75 SRMSG2 0A26 ZCHRCS 211D
|
||
PGTBLF 0FEB PUTVAL 130D RET0 1309 SRMSG3 0A46 ZCKLEN 001A
|
||
PGTFD 0040 PUTVL1 132A RET1 1634 SRND 2169 ZCKSUM 001C
|
||
PGTOP 21BE PUTVLC 1313 RET2 1643 SRNDC 0029 ZCODEP 21BB
|
||
PNTTIM 073B PUTVLG 132F RETCUR 0019 SRSWPD 0921 ZENDLD 0004
|
||
POPRET 0497 PUTVLL 1322 RETURN 1615 STAFLG 0BC6 ZER 0206
|
||
POPSTK 1D27 PUTVR1 1318 RFALSE 1461 STAR3A 11B4 ZEROQ 1524
|
||
POSPS1 06CD PZFWRD 1F70 RND 1BD0 START 0100 ZFWORD 0018
|
||
POSPS2 06C3 PZSTP0 1F32 RND1 1BD9 START1 10AE ZGLOBA 000C
|
||
POSPST 06B2 PZSTP1 1F34 RND2 1BD3 START2 1140 ZID 0002
|
||
PREDB 1369 PZSTR 1F0B ROOMG 0010 START3 1155 ZMEMT 219B
|
||
PREDB1 138C PZSTR1 1F3A RSIBRK 1A50 START4 11D3 ZMOD 1896
|
||
PREDB2 13B4 PZSTR2 1F43 RSTACK 14AE START5 11F1 ZNOP 14A2
|
||
PREDB3 1397 PZSTRA 1F58 RTABP 21CB STBYTF 21C2 ZOBJEC 000A
|
||
PREDB4 13C8 PZSTRC 1FD6 RTRMST 0131 TMCHK 057A ZPCFLG 21B0
|
||
PREDF 1353 PZSTRL 1F16 RTRUE 1458 TPA 0100 ZPCH 2187
|
||
PREDLB 1378 PZSTRP 1FE9 RTRUE1 145B TRUE 00FF ZPCL 2188
|
||
PREDNB 135A PZSTRS 1FD1 SAVE 0768 TWODSK 01B5 ZPCOFF 21AC
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKMSX.ASM PAGE 88
|
||
---- SYMBOL TABLE ----
|
||
|
||
ZPCPG 21B1 ZREAD 19BC ZSET 1727 ZSTART 0006 ZSWAP 0001
|
||
ZPCPNT 21AE ZRSTAR 14AB ZSPLIT 0004 ZSTATB 0010 ZSWAPF 0001
|
||
ZPOP 1BC7 ZRSTOR 14A8 ZSTACK 0DEB ZSTBUI 2192 ZTANDY 0008
|
||
ZPURBT 000E ZSAVE 14A5 ZSTAKC 218A ZSTBUO 21C5 ZTIMEF 0002
|
||
ZPUSH 1BBE ZSCRIP 0010 ZSTAKL 00E0 ZSTWRD 21C3 ZVERS 0000
|
||
ZQUIT 14BD ZSERNM 0012 ZSTAKP 0DE9 ZSUB 1827 ZVOCAB 0008
|
||
|
||
***** NO ERRORS DETECTED *****
|