mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-05-04 15:25:56 +00:00
5031 lines
197 KiB
Plaintext
5031 lines
197 KiB
Plaintext
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 1
|
||
|
||
|
||
; **********************************************************************
|
||
; * *
|
||
; * ZIP80 - CPM 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 *
|
||
; * 2/5/85 LS (CLEAR RND FLG) *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
;
|
||
; *************************************
|
||
; * 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: ZORKCPM.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: ZORKCPM.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: ZORKCPM.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 31070E LD SP,PDL+LPDL ;INIT MACHINE STACK
|
||
0203 C3A610 JP BODY ;JUMP AROUND SUBROUTINE SECTION
|
||
;
|
||
; *************************************
|
||
; * SUBROUTINES *
|
||
; *************************************
|
||
;
|
||
0206 C35F07 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 3ADA21 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 32750C 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: ZORKCPM.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: ZORKCPM.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 22EB0B GETDSK: LD (DBUFP),HL
|
||
02FA CD630B CALL LFILS ;OPEN ZORK/DAT FILE IF NOTHING OPEN
|
||
02FD 6F LD L,A
|
||
02FE 3A750C LD A,(FILTYP)
|
||
0301 FE03 CP 3 ;DATA TYPE OF FILE?
|
||
0303 7D LD A,L
|
||
0304 CA1803 JP Z,GETDK2
|
||
0307 21B921 LD HL,ZMEMT
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.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 CD930B CALL LFILD ;MAKE SURE ZORK/DAT IS OPEN
|
||
0312 C31803 JP GETDK2
|
||
|
||
0315 CDB30B 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 2AEB0B LD HL,(DBUFP)
|
||
0340 0680 LD B,128
|
||
0342 CD4B03 CALL MOVIT
|
||
0345 22EB0B 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) ;LINES PER PAGE
|
||
0357 3D DEC A
|
||
0358 32760C LD (MORCNT),A
|
||
035B CDF704 CALL FLSLIN ;FLUSH LINE
|
||
035E 3E01 LD A,1
|
||
0360 32B721 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 CHAR COUNT
|
||
0367 2ABB21 LD HL,(ARG1) ;READ A BUFFER
|
||
036A 23 INC HL
|
||
036B CD3804 READB1: CALL CIN ;GET A CHAR
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.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 32B721 LD (NOLPT),A
|
||
03C6 2AD921 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: ZORKCPM.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 2ABB21 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 2ABB21 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 ;OR <DEL>
|
||
0424 CAA303 JP Z,RDBFRO
|
||
0427 FE7F CP 7FH
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 10
|
||
|
||
|
||
0429 CAA303 JP Z,RDBFRO
|
||
042C D5 PUSH DE
|
||
042D 1E07 LD E,7 ;RING BELL, READ BUFFER FULL
|
||
042F 0E06 LD C,CDIO
|
||
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 21E60B 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 3AE60B CIN2: LD A,(RDFLG)
|
||
0454 B7 OR A
|
||
0455 C23B04 JP NZ,CIN1 ;NOT FIRST READ
|
||
0458 CDEE1B CALL RND
|
||
045B C33B04 JP CIN1
|
||
|
||
045E 21E50B COUTD: LD HL,COUTDC ;INCREASE COUNT
|
||
0461 34 INC (HL)
|
||
0462 3A0F01 LD A,(CPMINV) ;INVERSE VIDEO ADDER
|
||
0465 21E40B 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
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 11
|
||
|
||
|
||
0484 1E0A LD E,0AH
|
||
0486 0E06 LD C,CDIO
|
||
0488 CD0500 CALL BDOS
|
||
048B 0E0D PCRLD1: LD C,0DH
|
||
048D CD9B04 CALL LPCHK
|
||
0490 21760C 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 2AD921 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 CP 20H
|
||
04D0 DAF304 JP C,CORET ;NON PRINTING
|
||
04D3 3AB721 COUT1: LD A,(NOLPT)
|
||
04D6 B7 OR A
|
||
04D7 C25E04 JP NZ,COUTD
|
||
04DA 3AED0B LD A,(NCHARS)
|
||
04DD 210301 LD HL,CPMCPL
|
||
04E0 BE CP (HL)
|
||
04E1 D47405 CALL NC,LINOCR ;OUTPUT LINE IF FULL
|
||
04E4 3AED0B LD A,(NCHARS)
|
||
04E7 3C INC A
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 12
|
||
|
||
|
||
04E8 32ED0B LD (NCHARS),A
|
||
04EB 2A730C LD HL,(CHRPNT)
|
||
04EE 71 LD (HL),C
|
||
04EF 23 INC HL
|
||
04F0 22730C LD (CHRPNT),HL
|
||
04F3 E1 CORET: POP HL
|
||
04F4 D1 POP DE
|
||
04F5 C1 POP BC
|
||
04F6 C9 RET
|
||
|
||
04F7 C5 FLSLIN: PUSH BC ;FLUSH LINE
|
||
04F8 3AED0B 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 3AED0B 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 2A730C 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 2A730C LINFUL: LD HL,(CHRPNT) ;PRINT WHOLE LINE
|
||
0524 3AED0B LD A,(NCHARS)
|
||
0527 47 LD B,A
|
||
0528 C5 LINOT2: PUSH BC
|
||
0529 E5 PUSH HL
|
||
052A 21EE0B 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)
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 13
|
||
|
||
|
||
053E CD9B04 CALL LPCHK
|
||
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 3AED0B LD A,(NCHARS)
|
||
054F 90 SUB B
|
||
0550 3D DEC A
|
||
0551 F25505 JP P,LINOT7
|
||
0554 AF XOR A
|
||
;
|
||
0555 32ED0B LINOT7: LD (NCHARS),A ;CHARACTERS NOT YET PRINTED
|
||
0558 CA6605 JP Z,LINOT5
|
||
055B 11EE0B 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 21EE0B LINOT5: LD HL,CHARS
|
||
0569 3AED0B LD A,(NCHARS)
|
||
056C CD081F CALL HLOFF
|
||
056F 22730C LD (CHRPNT),HL
|
||
0572 C1 LINOTR: POP BC
|
||
0573 C9 RET
|
||
|
||
0574 CD0205 LINOCR: CALL LINOUT
|
||
0577 C37304 JP PCRLFD
|
||
|
||
057A 2AD921 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 3AB721 LPTO: LD A,(NOLPT)
|
||
0589 B7 OR A
|
||
058A C0 RET NZ ;SOME ITEMS DON'T GO TO LPT
|
||
058B 3AE70B LD A,(PRFLG)
|
||
058E B7 OR A
|
||
058F CCB405 CALL Z,LPINIT
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 14
|
||
|
||
|
||
0592 C5 PUSH BC
|
||
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 32E70B 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 3ADF21 LD A,(CSPERM) ;SAVE DATA CLOBERED BY PRNTDC
|
||
05CA 67 LD H,A
|
||
05CB 3AE021 LD A,(STBYTF)
|
||
05CE 6F LD L,A
|
||
05CF E5 PUSH HL
|
||
05D0 2AE121 LD HL,(ZSTWRD)
|
||
05D3 E5 PUSH HL
|
||
05D4 2AD121 LD HL,(MPCL)
|
||
05D7 E5 PUSH HL
|
||
05D8 2AD021 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 32E50B LD (COUTDC),A ;BEGINNING OF LINE
|
||
05E6 3E01 LD A,1
|
||
05E8 32B721 LD (NOLPT),A
|
||
05EB 3EFF LD A,0FFH
|
||
05ED 32E40B LD (STAFLG),A ;STATUS LINE FLAG (ANDED WITH CPMINV ADDER)
|
||
05F0 CD7A05 CALL TMCHK
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 15
|
||
|
||
|
||
05F3 C25306 JP NZ,WHOLT
|
||
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 CD5913 CALL VARGET
|
||
0604 CD971B CALL PRNTNC
|
||
0607 0E2F LD C,'/'
|
||
0609 CDB604 CALL COUT
|
||
060C 3E12 LD A,MOVESG
|
||
060E CD5913 CALL VARGET
|
||
0611 CD971B 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 32B721 LD (NOLPT),A
|
||
0625 32E40B LD (STAFLG),A
|
||
0628 32D521 LD (MPCFLG),A ;RESTORE STRING VALUES
|
||
062B E1 POP HL
|
||
062C 7D LD A,L
|
||
062D 32D021 LD (MPCH),A
|
||
0630 E1 POP HL
|
||
0631 22D121 LD (MPCL),HL
|
||
0634 E1 POP HL
|
||
0635 22E121 LD (ZSTWRD),HL
|
||
0638 E1 POP HL
|
||
0639 7C LD A,H
|
||
063A 32DF21 LD (CSPERM),A
|
||
063D 7D LD A,L
|
||
063E 32E021 LD (STBYTF),A
|
||
0641 CD3E20 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 CD5913 CALL VARGET
|
||
064F 7D LD A,L
|
||
0650 C32116 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 CD5913 CALL VARGET
|
||
0661 7D LD A,L ;A <= HOURS
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 16
|
||
|
||
|
||
0662 F5 PUSH AF ;SAVE HOURS
|
||
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 CD971B 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 CD5913 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 3AE50B 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
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 17
|
||
|
||
|
||
06C2 46 LD B,(HL)
|
||
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 32B721 LD (NOLPT),A ;DON'T SCRIPT MORE MESSAGE
|
||
0710 21E206 LD HL,MORMSG
|
||
0713 CD660A 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 32B721 LD (NOLPT),A
|
||
073A C9 RET ;NOW AT BEGINNING OF CLEAR LINE
|
||
|
||
073B 110A00 PNTTIM: LD DE,10
|
||
073E CD251D CALL HLGEDE
|
||
0741 0E30 LD C,'0'
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 18
|
||
|
||
|
||
0743 D4B604 CALL NC,COUT
|
||
0746 C3971B JP PRNTNC
|
||
|
||
;ZZZZZZZZZZZZZZZZZZZZZZZZZZZ
|
||
0749 115C00 QUIT: LD DE,CPMFCB
|
||
074C 0E10 LD C,CLOSE
|
||
074E CD0500 CALL BDOS
|
||
0751 213101 LD HL,RTRMST
|
||
0754 CD7E02 CALL PCSTR
|
||
0757 0E00 LD C,CRESET
|
||
0759 CD0500 CALL BDOS
|
||
075C C34907 JP QUIT
|
||
|
||
075F RESTAR:
|
||
075F 115C00 LD DE,CPMFCB
|
||
0762 0E10 LD C,CLOSE
|
||
0764 CD0500 CALL BDOS
|
||
0767 213101 LD HL,RTRMST
|
||
076A CD7E02 CALL PCSTR
|
||
076D C30001 JP START
|
||
|
||
0770 SAVE:
|
||
0770 AF XOR A
|
||
0771 32750C LD (FILTYP),A
|
||
0774 115C00 LD DE,CPMFCB ;CLOSE CURRENT FCB
|
||
0777 0E10 LD C,CLOSE ;SO FILE IS PROTECTED
|
||
0779 CD0500 CALL BDOS
|
||
077C CD6C08 CALL SRGFNM ;GET SAVE NAME (SWAP DISKS)
|
||
077F 115C00 LD DE,CPMFCB ;DELETE ANY PREVIOUS FILE
|
||
0782 0E13 LD C,DELETE ;BY THIS NAME
|
||
0784 CD0500 CALL BDOS
|
||
0787 115C00 LD DE,CPMFCB ;CREATE NEW SAVE FILE
|
||
078A 0E16 LD C,MAKEF
|
||
078C CD0500 CALL BDOS
|
||
078F 3C INC A
|
||
0790 CA3508 JP Z,SFAIL ;DID NOT OPEN
|
||
0793 2AD921 LD HL,(ZCODEP)
|
||
0796 010000 LD BC,ZVERS
|
||
0799 09 ADD HL,BC
|
||
079A 7E LD A,(HL) ;STORE VERSION NUMBER
|
||
079B 328000 LD (CPMBUF),A
|
||
079E 2A070E LD HL,(ZSTAKP)
|
||
07A1 228100 LD (CPMBUF+1),HL
|
||
07A4 218300 LD HL,CPMBUF+3
|
||
07A7 118721 LD DE,SRND
|
||
07AA 012900 LD BC,SRNDC ;TO MAKE EXTERNALS WORK
|
||
07AD 41 LD B,C
|
||
07AE CD4B03 CALL MOVIT
|
||
07B1 115C00 LD DE,CPMFCB
|
||
07B4 0E15 LD C,WRITES
|
||
07B6 CD0500 CALL BDOS
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 19
|
||
|
||
|
||
07B9 B7 OR A
|
||
07BA C23508 JP NZ,SFAIL ;WRITE OUT INITIAL STUFF
|
||
07BD 0E04 LD C,0+(((ZSTAKL*2)+127)/128)
|
||
07BF 11090E LD DE,ZSTACK ;NEXT WRITE OUT STACK
|
||
07C2 0680 SAVEA: LD B,128
|
||
07C4 218000 LD HL,CPMBUF
|
||
07C7 CD4B03 CALL MOVIT
|
||
07CA C5 PUSH BC
|
||
07CB D5 PUSH DE
|
||
07CC 115C00 LD DE,CPMFCB
|
||
07CF 0E15 LD C,WRITES ;WRITE SEQ. RECORD
|
||
07D1 CD0500 CALL BDOS
|
||
07D4 B7 OR A
|
||
07D5 C24808 JP NZ,SRFAIL
|
||
07D8 D1 POP DE
|
||
07D9 C1 POP BC
|
||
07DA 0D DEC C
|
||
07DB C2C207 JP NZ,SAVEA ;ALL ZSTACK RECORDS DONE?
|
||
07DE 2AD921 LD HL,(ZCODEP)
|
||
07E1 110E00 LD DE,ZPURBT
|
||
07E4 19 ADD HL,DE
|
||
07E5 4E LD C,(HL) ;COUNT OF PAGES
|
||
07E6 2AD921 LD HL,(ZCODEP)
|
||
07E9 EB EX DE,HL ;WHERE TO START FROM
|
||
07EA 0602 LD B,2 ;128 BYTE RECORDS
|
||
07EC C5 SAVE1: PUSH BC
|
||
07ED 218000 LD HL,CPMBUF
|
||
07F0 0680 LD B,128
|
||
07F2 CD4B03 CALL MOVIT ;GET NEXT RECORD TO TRANSFER
|
||
07F5 D5 PUSH DE
|
||
07F6 115C00 LD DE,CPMFCB
|
||
07F9 0E15 LD C,WRITES ;WRITE IT SEQ. TO DISK
|
||
07FB CD0500 CALL BDOS
|
||
07FE D1 POP DE
|
||
07FF C1 POP BC
|
||
0800 B7 OR A
|
||
0801 C23508 JP NZ,SFAIL ;WRITE ERROR
|
||
0804 05 DEC B
|
||
0805 C2EC07 JP NZ,SAVE1 ;GO DO 2ND HALF OF PAGE
|
||
0808 0602 LD B,2 ;RESET FOR 2 RECORDS PER PAGE
|
||
080A 0D DEC C
|
||
080B F2EC07 JP P,SAVE1 ;NEXT PAGE
|
||
080E 115C00 SRCLOS: LD DE,CPMFCB
|
||
0811 0E10 LD C,CLOSE ;DONE, CLOSE SAVE FILE
|
||
0813 CD0500 CALL BDOS
|
||
0816 CD3F09 CALL SRSWPD ;TELL PLAYER SWAP GAME DISK BACK IN
|
||
0819 0E19 LD C,CPMRCD ;GET CURRENT DEFAULT DRIVE
|
||
081B CD0500 CALL BDOS
|
||
081E F5 PUSH AF ;HOLD IT A SEC
|
||
081F 0E0D LD C,CPMRDS ;RESET SYSTEM FOR NEW DISK
|
||
0821 CD0500 CALL BDOS
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 20
|
||
|
||
|
||
0824 F1 POP AF ;RETRIEVE
|
||
0825 5F LD E,A ;AND RESET CORRECT DEFAULT
|
||
0826 0E0E LD C,CPMSEL ;(DESTROYED BY RESET SYSTEM)
|
||
0828 CD0500 CALL BDOS
|
||
082B CDB404 CALL PCRLF
|
||
082E AF XOR A
|
||
082F 32CE21 LD (ZPCFLG),A
|
||
0832 C38013 JP PREDS
|
||
|
||
|
||
|
||
0835 115C00 SFAIL: LD DE,CPMFCB
|
||
0838 0E10 LD C,CLOSE
|
||
083A CD0500 CALL BDOS
|
||
083D 115C00 LD DE,CPMFCB
|
||
0840 0E13 LD C,DELETE
|
||
0842 CD0500 CALL BDOS
|
||
0845 C35008 JP SFAIL1
|
||
|
||
0848 115C00 SRFAIL: LD DE,CPMFCB
|
||
084B 0E10 LD C,CLOSE
|
||
084D CD0500 CALL BDOS
|
||
0850 CD3F09 SFAIL1: CALL SRSWPD
|
||
0853 0E19 LD C,CPMRCD ;RETURN CURRENT DEFAULT DISK
|
||
0855 CD0500 CALL BDOS
|
||
0858 F5 PUSH AF
|
||
0859 0E0D LD C,CPMRDS
|
||
085B CD0500 CALL BDOS
|
||
085E F1 POP AF
|
||
085F 5F LD E,A
|
||
0860 0E0E LD C,CPMSEL ;RESELECT DEFAULT
|
||
0862 CD0500 CALL BDOS
|
||
0865 AF XOR A
|
||
0866 32CE21 LD (ZPCFLG),A
|
||
0869 C37113 JP PREDF
|
||
|
||
086C 21080A SRGFNM: LD HL,SRMSG1
|
||
086F CD660A CALL MSGOUT
|
||
|
||
0872 0608 LD B,8
|
||
0874 21EC02 LD HL,SRDFNM+1 ;FILENAME
|
||
0877 CD0009 CALL SRGFNA ;DISPLAY CHARS TILL HIT BLANKS
|
||
087A 21640A LD HL,SRMSG3
|
||
087D CD660A CALL MSGOUT
|
||
0880 0603 LD B,3
|
||
0882 21F402 LD HL,SRDFNM+9
|
||
0885 CD0009 CALL SRGFNA
|
||
0888 21440A LD HL,SRMSG2
|
||
088B CD660A CALL MSGOUT
|
||
088E 210000 LD HL,0
|
||
0891 226800 LD (CPMFCB+12),HL ;CLEAR EX,S1
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 21
|
||
|
||
|
||
0894 226A00 LD (CPMFCB+14),HL ; S2,RC
|
||
0897 AF XOR A
|
||
0898 327C00 LD (CPMCR),A ; CR
|
||
089B 118000 LD DE,CPMBUF
|
||
089E 3E0E LD A,14
|
||
08A0 12 LD (DE),A
|
||
08A1 0E0A LD C,CRCBUF ;READ CONSOLE BUFFER
|
||
08A3 CD0500 CALL BDOS
|
||
08A6 CD7304 CALL PCRLFD
|
||
08A9 0E19 LD C,CPMRCD ;RETURN CURRENT DISK
|
||
08AB CD0500 CALL BDOS
|
||
08AE F5 PUSH AF
|
||
08AF 0E0D LD C,CPMRDS ;RESET SYSTEM
|
||
08B1 CD0500 CALL BDOS
|
||
08B4 F1 POP AF
|
||
08B5 5F LD E,A
|
||
08B6 0E0E LD C,CPMSEL ;RESELECT DEFAULT
|
||
08B8 CD0500 CALL BDOS
|
||
08BB 3A8100 LD A,(CPMBUF+1)
|
||
08BE B7 OR A
|
||
08BF CA3409 JP Z,SRGDFN ;USE DEFAULT, SKIP THIS NEXT PART
|
||
08C2 060B LD B,11
|
||
08C4 21EB02 LD HL,SRDFNM
|
||
08C7 23 INC HL ;SKIP OVER DRIVE, LEAVE AS WAS SO PLAYER
|
||
08C8 ;NEED ONLY SPECIFY IT ONCE
|
||
08C8 3620 SRGFM1: LD (HL),20H
|
||
08CA 23 INC HL
|
||
08CB 05 DEC B
|
||
08CC C2C808 JP NZ,SRGFM1 ;FILL WITH BLANK FILE NAME
|
||
08CF 47 LD B,A ;SAVE COUNT OF CHARACTERS
|
||
08D0 218200 LD HL,CPMBUF+2 ;BEG OF FILE NAME
|
||
08D3 11EC02 LD DE,SRDFNM+1 ;STORAGE FOR FILE NAME
|
||
08D6 FE03 CP 3
|
||
08D8 DAED08 JP C,SRGFN2 ;NO DRIVE SPEC
|
||
08DB 3A8300 LD A,(CPMBUF+3)
|
||
08DE FE3A CP ':' ;DRIVE SPEC?
|
||
08E0 C2ED08 JP NZ,SRGFN2 ;NONE THIS TIME
|
||
08E3 05 DEC B
|
||
08E4 05 DEC B
|
||
08E5 7E LD A,(HL)
|
||
08E6 E60F AND 0FH ;DRIVE NUMBER
|
||
08E8 32EB02 LD (SRDFNM),A
|
||
08EB 23 INC HL
|
||
08EC 23 INC HL ;POINTER PAST DRIVE SPEC
|
||
08ED 05 SRGFN2: DEC B
|
||
08EE FA3409 JP M,SRGDFN ;FILE NAME NOW DEFAULT
|
||
08F1 7E LD A,(HL)
|
||
08F2 CD2109 CALL UPPER
|
||
08F5 23 INC HL
|
||
08F6 FE2E CP '.'
|
||
08F8 CA2A09 JP Z,SRGFN3 ;EXTENTION
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 22
|
||
|
||
|
||
08FB 12 LD (DE),A
|
||
08FC 13 INC DE
|
||
08FD C3ED08 JP SRGFN2
|
||
|
||
0900 7E SRGFNA: LD A,(HL)
|
||
0901 FE20 CP ' '
|
||
0903 CA1B09 JP Z,SRGFNB
|
||
0906 4F LD C,A
|
||
0907 C5 PUSH BC
|
||
0908 D5 PUSH DE
|
||
0909 E5 PUSH HL
|
||
090A 5E LD E,(HL)
|
||
090B 0E06 LD C,CDIO
|
||
090D CD0500 CALL BDOS
|
||
0910 E1 POP HL
|
||
0911 E5 PUSH HL
|
||
0912 CD820A CALL MSGCRC ;SEND LF IF NECESSARY
|
||
0915 E1 POP HL
|
||
0916 D1 POP DE
|
||
0917 C1 POP BC
|
||
0918 CD9B04 CALL LPCHK
|
||
091B 23 SRGFNB: INC HL
|
||
091C 05 DEC B
|
||
091D C20009 JP NZ,SRGFNA
|
||
0920 C9 RET
|
||
|
||
0921 FE61 UPPER: CP 'a'
|
||
0923 D8 RET C
|
||
0924 FE7B CP 'z'+1
|
||
0926 D0 RET NC
|
||
0927 D620 SUB 'a'-'A'
|
||
0929 C9 RET
|
||
|
||
092A 11F402 SRGFN3: LD DE,SRDFNM+9
|
||
092D 78 LD A,B
|
||
092E E603 AND 3 ;MAX OF 3 CHARACTERS
|
||
0930 47 LD B,A
|
||
0931 C3ED08 JP SRGFN2
|
||
|
||
0934 11EB02 SRGDFN: LD DE,SRDFNM ;DEFAULT FILE NAME
|
||
0937 215C00 LD HL,CPMFCB
|
||
093A 060C LD B,12
|
||
093C C34B03 JP MOVIT
|
||
|
||
093F 215009 SRSWPD: LD HL,LFILDG
|
||
0942 CD660A MSGRES: CALL MSGOUT ;MESSAGE THEN RESPONSE
|
||
0945 CD3804 CALL CIN ;WAIT FOR CHARACTER
|
||
0948 214E09 LD HL,CRMSG
|
||
094B C3660A JP MSGOUT
|
||
|
||
094E 0D00 CRMSG: DB 0DH,0
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 23
|
||
|
||
|
||
|
||
0950 4C6F6164 LFILDG: DB 'Load Game Disk if it was removed.',0DH
|
||
0972 54797065 DB 'Type <ENTER> to continue >',0
|
||
098D 4C6F6164 LFILDM: DB 'Load Disk 2, type <ENTER> to continue >',0
|
||
09B5 4C6F6164 LFILPM: DB 'Load Disk 1, type <ENTER> to continue >',0
|
||
09DD 4C6F6164 LFILGM: DB 'Load Game Disk, type <ENTER> to continue >',0
|
||
|
||
0A08 4C6F6164 SRMSG1: DB 'Load SAVE disk then enter file name.',0DH
|
||
0A2D 28646566 DB '(default file name is ',0
|
||
|
||
0A44 292E0D SRMSG2: DB ').',0DH
|
||
0A47 54797065 DB 'Type <ENTER> to continue > ',0
|
||
|
||
0A64 2E00 SRMSG3: DB '.',0
|
||
|
||
0A66 4E MSGOUT: LD C,(HL)
|
||
0A67 7E LD A,(HL)
|
||
0A68 B7 OR A
|
||
0A69 C8 RET Z
|
||
0A6A C5 PUSH BC
|
||
0A6B D5 PUSH DE
|
||
0A6C E5 PUSH HL
|
||
0A6D 5E LD E,(HL)
|
||
0A6E 0E06 LD C,CDIO
|
||
0A70 CD0500 CALL BDOS
|
||
0A73 E1 POP HL
|
||
0A74 E5 PUSH HL
|
||
0A75 CD820A CALL MSGCRC
|
||
0A78 E1 POP HL
|
||
0A79 D1 POP DE
|
||
0A7A C1 POP BC
|
||
0A7B CD9B04 CALL LPCHK
|
||
0A7E 23 INC HL
|
||
0A7F C3660A JP MSGOUT
|
||
|
||
0A82 3A0D01 MSGCRC: LD A,(CPMCLF)
|
||
0A85 B7 OR A
|
||
0A86 C8 RET Z ;NO LF AFTER CR
|
||
0A87 7E LD A,(HL)
|
||
0A88 FE0D CP 0DH
|
||
0A8A C0 RET NZ ;NOT CR
|
||
0A8B 1E0A LD E,0AH ;PRINT A LF
|
||
0A8D 0E06 LD C,CDIO
|
||
0A8F CD0500 CALL BDOS
|
||
0A92 C9 RET
|
||
|
||
|
||
0A93 AF RESTOR: XOR A
|
||
0A94 32750C LD (FILTYP),A
|
||
0A97 115C00 LD DE,CPMFCB
|
||
0A9A 0E10 LD C,CLOSE
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 24
|
||
|
||
|
||
0A9C CD0500 CALL BDOS
|
||
0A9F CD6C08 CALL SRGFNM
|
||
0AA2 115C00 LD DE,CPMFCB
|
||
0AA5 0E0F LD C,OPEN
|
||
0AA7 CD0500 CALL BDOS
|
||
0AAA 3C INC A
|
||
0AAB CA4808 JP Z,SRFAIL
|
||
0AAE 115C00 LD DE,CPMFCB
|
||
0AB1 0E14 LD C,READS
|
||
0AB3 CD0500 CALL BDOS
|
||
0AB6 B7 OR A
|
||
0AB7 C24808 JP NZ,SRFAIL
|
||
0ABA 2AD921 LD HL,(ZCODEP)
|
||
0ABD 110000 LD DE,ZVERS
|
||
0AC0 19 ADD HL,DE
|
||
0AC1 3A8000 LD A,(CPMBUF)
|
||
0AC4 BE CP (HL)
|
||
0AC5 C24808 JP NZ,SRFAIL ;VERSIONS DIFFER
|
||
0AC8 2A8100 LD HL,(CPMBUF+1)
|
||
0ACB 22070E LD (ZSTAKP),HL ;STACK POINTER
|
||
0ACE 118300 LD DE,CPMBUF+3
|
||
0AD1 218721 LD HL,SRND
|
||
0AD4 012900 LD BC,SRNDC ;TO MAKE EXTERNALS WORK
|
||
0AD7 41 LD B,C
|
||
0AD8 CD4B03 CALL MOVIT ;RESTORE RANDOM DATA
|
||
0ADB 0E03 LD C,0+(((ZSTAKL*2)-1)/128) ;ONE TOO FEW
|
||
0ADD 21090E LD HL,ZSTACK ;NEXT WRITE OUT STACK
|
||
0AE0 C5 RESTA: PUSH BC
|
||
0AE1 E5 PUSH HL
|
||
0AE2 115C00 LD DE,CPMFCB
|
||
0AE5 0E14 LD C,READS
|
||
0AE7 CD0500 CALL BDOS
|
||
0AEA E1 POP HL
|
||
0AEB C1 POP BC
|
||
0AEC B7 OR A
|
||
0AED C24808 JP NZ,SRFAIL
|
||
0AF0 118000 LD DE,CPMBUF
|
||
0AF3 0680 LD B,128
|
||
0AF5 CD4B03 CALL MOVIT
|
||
0AF8 0D DEC C
|
||
0AF9 C2E00A JP NZ,RESTA
|
||
0AFC E5 PUSH HL ;READ LAST BLOCK
|
||
0AFD 115C00 LD DE,CPMFCB
|
||
0B00 0E14 LD C,READS
|
||
0B02 CD0500 CALL BDOS
|
||
0B05 E1 POP HL
|
||
0B06 B7 OR A
|
||
0B07 C24808 JP NZ,SRFAIL
|
||
0B0A 118000 LD DE,CPMBUF
|
||
0B0D 0640 LD B,0+((ZSTAKL*2)-((((ZSTAKL*2)-1)/128)*128))
|
||
0B0F CD4B03 CALL MOVIT
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 25
|
||
|
||
|
||
0B12 2AD921 LD HL,(ZCODEP)
|
||
0B15 111100 LD DE,ZSCRIP+1
|
||
0B18 19 ADD HL,DE
|
||
0B19 22E80B LD (SCPLOC),HL ;LOCATION OF SCRIPT FLAG
|
||
0B1C 7E LD A,(HL)
|
||
0B1D E601 AND 1 ;ISOLATE SCRIPT BIT
|
||
0B1F 32EA0B LD (SCPVAL),A ;AND SAVE
|
||
0B22 2AD921 LD HL,(ZCODEP)
|
||
0B25 110E00 LD DE,ZPURBT
|
||
0B28 19 ADD HL,DE
|
||
0B29 4E LD C,(HL)
|
||
0B2A 2AD921 LD HL,(ZCODEP) ;POINTER TO BEGINNING OF DATA
|
||
0B2D 0602 LD B,2 ;128 BYTE RECORDS
|
||
0B2F C5 REST1: PUSH BC
|
||
0B30 E5 PUSH HL
|
||
0B31 115C00 LD DE,CPMFCB
|
||
0B34 0E14 LD C,READS
|
||
0B36 CD0500 CALL BDOS
|
||
0B39 E1 POP HL
|
||
0B3A C1 POP BC
|
||
0B3B B7 OR A
|
||
0B3C C25F07 JP NZ,RESTAR
|
||
0B3F 118000 LD DE,CPMBUF
|
||
0B42 C5 PUSH BC
|
||
0B43 0680 LD B,128
|
||
0B45 CD4B03 CALL MOVIT
|
||
0B48 C1 POP BC
|
||
0B49 05 DEC B
|
||
0B4A C22F0B JP NZ,REST1
|
||
0B4D 0602 LD B,2
|
||
0B4F 0D DEC C
|
||
0B50 F22F0B JP P,REST1
|
||
0B53 2AE80B LD HL,(SCPLOC)
|
||
0B56 7E LD A,(HL)
|
||
0B57 E6FE AND 0FEH ;CLEAR SCRIPT BIT
|
||
0B59 E5 PUSH HL
|
||
0B5A 21EA0B LD HL,SCPVAL
|
||
0B5D B6 OR (HL) ;OR IN VALUE FROM MEMORY
|
||
0B5E E1 POP HL
|
||
0B5F 77 LD (HL),A
|
||
0B60 C30E08 JP SRCLOS ;ALL DONE
|
||
|
||
0B63 F5 LFILS: PUSH AF
|
||
0B64 3A750C LD A,(FILTYP)
|
||
0B67 FE03 CP 3 ;.DAT FILE ALREADY OPEN?
|
||
0B69 CAD30B JP Z,LFILR ; YES. RETURN.
|
||
0B6C B7 OR A ; NO. SOME OTHER TYPE OPEN?
|
||
0B6D C2D30B JP NZ,LFILR ; YES. RETURN.
|
||
0B70 11C702 LFILS1: LD DE,FNDAT ; NO. ^ DATA FILE NAME
|
||
0B73 3E03 LD A,3 ;OPEN TYPE 3
|
||
0B75 CD1B02 CALL OPNDK1 ;TRY TO OPEN FILE
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 26
|
||
|
||
|
||
0B78 C2D30B JP NZ,LFILR ;OPEN .DAT FILE COMPLETE?
|
||
0B7B ; YES. RETURN.
|
||
0B7B 3AB501 LD A,(TWODSK) ;CHECK IF 1 OR 2 DISKS FOR GAME
|
||
0B7E FE01 CP 1 ;IF = 1 THEN 2 DISKS
|
||
0B80 CA8C0B JP Z,LFILF ;SO GO TRY OTHER TYPE FILES
|
||
0B83 21DD09 LD HL,LFILGM ;ELSE ASK FOR CORRECT DISK
|
||
0B86 CD4209 CALL MSGRES
|
||
0B89 C3700B JP LFILS1 ;AND TRY AGAIN
|
||
0B8C AF LFILF: XOR A ; NO. SET FILTYP=0
|
||
0B8D 32750C LD (FILTYP),A ;OPEN FAILED TRY OTHER TYPE
|
||
0B90 C3D30B JP LFILR
|
||
|
||
0B93 F5 LFILD: PUSH AF
|
||
0B94 3A750C LD A,(FILTYP)
|
||
0B97 FE02 CP 2 ;.PUR FILE ALREADY OPEN?
|
||
0B99 CAD30B JP Z,LFILR ; YES.ALREADY OPEN
|
||
0B9C CDD50B CALL LFILC ;CLOSE EXISTING FILE IF ANY
|
||
0B9F 11D302 LFILD1: LD DE,FNPUR
|
||
0BA2 3E02 LD A,2
|
||
0BA4 CD1B02 CALL OPNDK1 ;TRY TO OPEN PURELOAD FILE
|
||
0BA7 C2D30B JP NZ,LFILR ;OPEN OK
|
||
0BAA 218D09 LD HL,LFILDM
|
||
0BAD CD4209 CALL MSGRES ;ASK TO LOAD DISK
|
||
0BB0 C39F0B JP LFILD1 ;TRY AGAIN
|
||
|
||
0BB3 F5 LFILP: PUSH AF
|
||
0BB4 3A750C LD A,(FILTYP)
|
||
0BB7 FE01 CP 1 ;PRELOAD TYPE?
|
||
0BB9 CAD30B JP Z,LFILR ;OPEN
|
||
0BBC CDD50B CALL LFILC
|
||
0BBF 11DF02 LFILP1: LD DE,FNPRE
|
||
0BC2 3E01 LD A,1
|
||
0BC4 CD1B02 CALL OPNDK1
|
||
0BC7 C2D30B JP NZ,LFILR ;OPEN OK
|
||
0BCA 21B509 LD HL,LFILPM
|
||
0BCD CD4209 CALL MSGRES ;LOAD PROPER DISK
|
||
0BD0 C3BF0B JP LFILP1
|
||
|
||
0BD3 F1 LFILR: POP AF
|
||
0BD4 C9 RET
|
||
|
||
0BD5 B7 LFILC: OR A
|
||
0BD6 C8 RET Z ;NONE OPEN
|
||
0BD7 115C00 LD DE,CPMFCB
|
||
0BDA 0E10 LD C,CLOSE
|
||
0BDC CD0500 CALL BDOS
|
||
0BDF AF XOR A
|
||
0BE0 32750C LD (FILTYP),A
|
||
0BE3 C9 RET
|
||
|
||
;DATA
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 27
|
||
|
||
|
||
|
||
0BE4 00 STAFLG: DB 0 ;0FFH WHEN IN STATUS LINE MODE
|
||
0BE5 00 COUTDC: DB 0 ;CHARACTER COUNT UNDER STATUS LINE
|
||
0BE6 00 RDFLG: DB 0 ;0 FOR FIRST READ
|
||
0BE7 00 PRFLG: DB 0 ;0 FOR FIRST PRINT
|
||
0BE8 0000 SCPLOC: DW 0 ;SCRIPT LOCATION
|
||
0BEA 00 SCPVAL: DB 0 ;SCRIPT VALUE
|
||
0BEB 0000 DBUFP: DW 0 ;DSK POINTER
|
||
0BED 00 NCHARS: DB 0
|
||
0BEE CHARS: DS CPLMAX
|
||
0C73 EE0B CHRPNT: DW CHARS
|
||
|
||
0C75 00 FILTYP: DB 0 ;0 FOR NONE, 1 FOR PRE, 2 FOR PUR, 3 FOR DAT
|
||
0C76 17 MORCNT: DB 23
|
||
|
||
;(PUT IN CODE SEGMENT TO PRESERVE COMMON ZORKBODY)
|
||
0C77 PDL: DS LPDL ;CONTROL STACK
|
||
0E07 C90F ZSTAKP: DW ZSTACK+(2*ZSTAKL) ;POINTER TO CURRENT ZSTACK
|
||
0E09 ZSTACK: DS ZSTAKL*2 ;ZSTACK
|
||
0FC9 PGTBL: DS MAXPGS ;PAGE NUMBER, 0 ALWAYS IN MEMORY, THUS 0=FREE
|
||
1009 PGTBLF: DS MAXPGS ;NEXT LINK POINTER, 0FFH IMPLIES END POINT
|
||
1049 PGTBLB: DS MAXPGS ;PREVIOUS LINK POINTER
|
||
0040 PGTFD EQU PGTBLF-PGTBL
|
||
0080 PGTBD EQU PGTBLB-PGTBL
|
||
|
||
1089 0D555044 VRS: DB 0DH,'UPDATED 2.5.85',0DH,0
|
||
109A 0D564552 VRLINE: DB 0DH,'VERSION C',0DH,0
|
||
;
|
||
; **********************************************************************
|
||
; * *
|
||
; * WARMSTART ENTRY *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
;
|
||
; MAIN BODY OF CODE STARTS HERE.
|
||
;
|
||
10A6 AF BODY: XOR A
|
||
10A7 32CE21 LD (ZPCFLG),A ;DISABLE TIME IN STATUS LINE, NO SPLIT FILE, NOT TANDY
|
||
10AA 32D521 LD (MPCFLG),A ;NO VALID MEMORY IN FROM DISK (MPCPNT NOT VALID)
|
||
10AD 32DC21 LD (PGTOP),A ;SET TOP OF LIST PAGE
|
||
|
||
10B0 0E19 LD C,RETCUR ;GET CURRENT DEFAULT DRIVE
|
||
10B2 CD0500 CALL BDOS ;RETS IN A
|
||
10B5 5F LD E,A ;SET DEFAULT DRIVE
|
||
10B6 0E0E LD C,CPMSEL ;THIS SEEMS REDUNDENT BUT THE MACHINE IS NOT
|
||
10B8 CD0500 CALL BDOS ;RECOGNIZING RESETS FROM BOOT DRIVE DONE BEFORE
|
||
10BB ;STARTING THE GAME
|
||
|
||
;
|
||
; INITIALIZE ZSTACK
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 28
|
||
|
||
|
||
;
|
||
10BB 3E01 LD A,1
|
||
10BD 32A821 LD (ZSTAKC),A ;INITIALIZE ZSTACK POSITION COUNTER
|
||
10C0 21C90F LD HL,ZSTACK+(2*ZSTAKL)
|
||
10C3 22070E LD (ZSTAKP),HL ;SAVE THE LOCATION OF THE BOTTOM OF ZSTACK IN
|
||
; ZSTACK POINTER
|
||
;
|
||
; INITIALIZE PAGE TABLES
|
||
;
|
||
10C6 11C90F LD DE,PGTBL ;DE ^ TOP OF PAGE TABLE
|
||
10C9 010040 LD BC,0+(MAXPGS*256) ;FOR NUMBER OF PAGES (IN B)
|
||
;
|
||
10CC START1:
|
||
; INITIALIZE PGTBL
|
||
10CC AF XOR A
|
||
10CD 12 LD (DE),A ;(PGTBL+PAGE NUMBER) <= 0
|
||
; FREE THE PAGE (NO PAGE IN MEMORY)
|
||
;
|
||
10CE 214000 LD HL,PGTFD ;HL <= MAXIMUM NUMBER OF PAGES
|
||
; USED AS AN OFFSET INTO PGTBLF
|
||
;
|
||
; INITIALIZE FOWARD POINTER
|
||
10D1 19 ADD HL,DE ;HL ^ PAGE FORWARD POINTER TABLE SLOT
|
||
10D2 71 LD (HL),C ;SAVE CURRENT POINTER
|
||
10D3 34 INC (HL) ;ADD 1 TO MAKE IT A FORWARD POINTER
|
||
;
|
||
; INITIALIZE PREVIOUS POINTER
|
||
10D4 218000 LD HL,PGTBD ;HL ^ PAGE PREVIOUS POINTER TABLE BASE ADDRESS
|
||
10D7 19 ADD HL,DE ;ADD OFFSET
|
||
10D8 71 LD (HL),C ;SAVE CURRENT POINTER
|
||
10D9 35 DEC (HL) ;SUBTRACT 1 TO MAKE IT A PREVIOUS POINTER
|
||
;
|
||
; UPDATE
|
||
10DA 0C INC C ;NEXT PAGE
|
||
10DB 13 INC DE ;NEXT SLOT IN TABLES
|
||
;
|
||
; TEST LOOP FOR DONE
|
||
10DC 05 DEC B ;DECREMENT NUMBER OF SLOTS REMAINING
|
||
10DD C2CC10 JP NZ,START1 ;>0? YES. CONTINUE LOOPING.
|
||
;
|
||
; CORRECT FOR NO FORWARD POINTER FOR LAST PAGE
|
||
;
|
||
10E0 213F00 LD HL,PGTFD-1
|
||
10E3 19 ADD HL,DE
|
||
10E4 36FF LD (HL),0FFH
|
||
;
|
||
; SET BOTTOM PAGE NO.
|
||
;
|
||
10E6 3E3F LD A,MAXPGS-1
|
||
10E8 32DD21 LD (PGBOT),A
|
||
;
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 29
|
||
|
||
|
||
; COMPUTE ZCODE STARTING ADDRESSS
|
||
;
|
||
10EB 21EB21 LD HL,LMEMRY ;POINT HL PAST ZIP
|
||
10EE 11FF00 LD DE,0FFH ;ADJUST ADDRESS TO A PAGE BOUNDRY
|
||
10F1 19 ADD HL,DE
|
||
10F2 2E00 LD L,0
|
||
10F4 22D921 LD (ZCODEP),HL ;SAVE ZCODE STARTING ADDRESS
|
||
;
|
||
; SET UP FILE NAMES FOR DAT, PRE, PUR AND SAV
|
||
;
|
||
10F7 CDAA02 CALL SETFIL ;APPEND GAME NAME PREFIX TO FILE NAME EXTENSIONS
|
||
;
|
||
; RESET FILE TYPE
|
||
;
|
||
10FA AF XOR A ;RESET FILTYP
|
||
10FB 32750C LD (FILTYP),A
|
||
;
|
||
; INITIALIZE TERMINAL
|
||
;
|
||
10FE 211001 LD HL,ITRMST ;POINT TO TERMINAL INITIALIZATION STRING
|
||
1101 CD7E02 CALL PCSTR ; FOR HOME, CLEAR SCREEN AND PRINT IT
|
||
;
|
||
; INITIALIZE TERMINAL RELATED COUNTERS
|
||
;
|
||
1104 3A0401 LD A,(CPMLPP) ;INITIALIZE LINES/PAGE (EXCLUDING STATUS LINE)
|
||
1107 3D DEC A ;COUNTER (MORCNT) =(CPMLPP)-1
|
||
1108 32760C LD (MORCNT),A ; WHICH TELLS THE PROGRAM WHEN TO PRINT ....MORE....
|
||
110B AF XOR A ;A<=0
|
||
110C 32ED0B LD (NCHARS),A ;RESET (NCHARS)
|
||
110F 21EE0B LD HL,CHARS ;SET UP CHARACTERS/LINE
|
||
1112 22730C LD (CHRPNT),HL
|
||
;
|
||
; GET THE FIRST SECTOR OF ZCODE
|
||
;
|
||
1115 2AD921 LD HL,(ZCODEP) ;^ TOP OF ZCODE BUFFER
|
||
1118 AF XOR A
|
||
1119 CDF702 CALL GETDSK ;READ IN FIRST SECTION
|
||
;
|
||
; EXTRACT GAME DATA FROM ZCODE HEADER
|
||
;
|
||
111C 2AD921 LD HL,(ZCODEP) ;HL ^ TOP OF ZCODE BUFFER
|
||
111F 110400 LD DE,ZENDLD ;DE <= OFFSET TO NON-PRELOADED ZCODE
|
||
1122 19 ADD HL,DE ;HL ^ START OF NON-PRELOADED ZCODE
|
||
1123 56 LD D,(HL) ;GET MSB OF ENDLOAD POINTER
|
||
1124 23 INC HL ; ADD 1
|
||
1125 5E LD E,(HL) ;GET LSB OF ENDLOAD POINTER
|
||
1126 210002 LD HL,200H ;HL <= 256
|
||
1129 19 ADD HL,DE ;HL <= ENDLOAD POINTER + 200H
|
||
112A 7C LD A,H ;A <= MSB
|
||
112B E6FE AND 0FEH ;
|
||
112D 67 LD H,A ;
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 30
|
||
|
||
|
||
112E 2E00 LD L,0 ;
|
||
1130 2B DEC HL ;ALL THIS TO GET TO BLOCK BOUNDRY
|
||
1131 EB EX DE,HL ;DE <= CORRECTED ENDLOAD POINTER
|
||
1132 010400 LD BC,ZENDLD ;BC <= OFFSET TO NON-PRELOADED ZCODE
|
||
1135 2AD921 LD HL,(ZCODEP) ;HL ^ TOP OF ZCODE BUFFER
|
||
1138 09 ADD HL,BC ;HL ^ START OF NON-PRELOADED ZCODE
|
||
1139 72 LD (HL),D ;SAVE MSB OF CORRECTED ENDLOAD POINTER
|
||
113A 23 INC HL
|
||
113B 73 LD (HL),E ;SAVE LSB OF CORRECTED ENDLOAD POINTER
|
||
113C 2AD921 LD HL,(ZCODEP) ;HL ^ TOP OF ZCODE BUFFER
|
||
113F D5 PUSH DE ;SAVE CORRECTED ENDLOAD POINTER ON STACK
|
||
1140 19 ADD HL,DE ;HL ^ END OF PRELOAD
|
||
1141 EB EX DE,HL ;DE ^ END OF PRELOAD
|
||
1142 CD0902 CALL MEMTOP ;DETERMINE WHERE THE TOP OF MEMORY IS (IN HL)
|
||
1145 EB EX DE,HL ;DE <= TOP OF MEMORY, HL <= END OF THE PRELOAD
|
||
1146 CD251D CALL HLGEDE ;CARRY FLAG SET IF HL G.E. DE
|
||
1149 D1 POP DE ;RESTORE CORRECTED ENDLOAD POINTER
|
||
114A DC0602 CALL C,ZER ;NO ROOM FOR ANY BUFFERS
|
||
114D 7A LD A,D
|
||
114E 0F RRCA
|
||
114F E67F AND 7FH
|
||
1151 57 LD D,A ;NUMBER OF PAGES IN REST OF THE PRELOAD
|
||
1152 3C INC A
|
||
1153 32B921 LD (ZMEMT),A ;PAGE NUMBER
|
||
1156 2AD921 LD HL,(ZCODEP) ;^ START OF ZCODE BUFFER
|
||
1159 010002 LD BC,200H
|
||
115C 1E00 LD E,0
|
||
;
|
||
; LOAD PRELOAD
|
||
;
|
||
115E 7A START2: LD A,D ;A <= PAGES REMAINING TO BE LOADED
|
||
115F B7 OR A ;DONE?
|
||
1160 CA7311 JP Z,START3 ; YES.
|
||
1163 15 DEC D
|
||
1164 09 ADD HL,BC
|
||
1165 1C INC E
|
||
1166 7B LD A,E
|
||
1167 C5 PUSH BC
|
||
1168 D5 PUSH DE
|
||
1169 E5 PUSH HL
|
||
116A CDF702 CALL GETDSK
|
||
116D E1 POP HL
|
||
116E D1 POP DE
|
||
116F C1 POP BC
|
||
1170 C35E11 JP START2
|
||
|
||
1173 2AD921 START3: LD HL,(ZCODEP)
|
||
1176 EB EX DE,HL
|
||
1177 210100 LD HL,ZSWAP
|
||
117A 19 ADD HL,DE
|
||
117B 7E LD A,(HL)
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 31
|
||
|
||
|
||
117C E601 AND 1
|
||
117E C40602 CALL NZ,ZER ;SWAPPED
|
||
1181 210700 LD HL,ZSTART+1
|
||
1184 19 ADD HL,DE
|
||
1185 7E LD A,(HL)
|
||
1186 32A621 LD (ZPCL),A
|
||
1189 2B DEC HL
|
||
118A 7E LD A,(HL)
|
||
118B E601 AND 1
|
||
118D 32A721 LD (ZPCL+1),A
|
||
1190 7E LD A,(HL)
|
||
1191 0F RRCA
|
||
1192 E67F AND 7FH
|
||
1194 32A521 LD (ZPCH),A
|
||
1197 210C00 LD HL,ZGLOBA
|
||
119A 19 ADD HL,DE ;GET RELATIVE ADDRESS OF GLOBAL TABLE
|
||
119B D5 PUSH DE
|
||
119C 56 LD D,(HL)
|
||
119D 23 INC HL
|
||
119E 5E LD E,(HL)
|
||
119F EB EX DE,HL
|
||
11A0 D1 POP DE
|
||
11A1 19 ADD HL,DE ;REAL ADDRESS OF GLOBAL TABLE
|
||
11A2 22C521 LD (GLOBAL),HL ;STORE IT
|
||
11A5 211800 LD HL,ZFWORD
|
||
11A8 19 ADD HL,DE ;GET RELATIVE ADDRESS OF FWORDS TABLE
|
||
11A9 D5 PUSH DE
|
||
11AA 56 LD D,(HL)
|
||
11AB 23 INC HL
|
||
11AC 5E LD E,(HL)
|
||
11AD EB EX DE,HL
|
||
11AE D1 POP DE
|
||
11AF 19 ADD HL,DE ;REAL ADDRESS OF FWORDS TABLE
|
||
11B0 22C821 LD (FWORDS),HL ;STORE IT
|
||
11B3 210400 LD HL,ZENDLD ;CALCULATE ^ TO BEGINNING OF PAGE BUFFERS
|
||
11B6 19 ADD HL,DE
|
||
11B7 D5 PUSH DE
|
||
11B8 56 LD D,(HL)
|
||
11B9 23 INC HL
|
||
11BA 5E LD E,(HL)
|
||
11BB E1 POP HL
|
||
11BC 19 ADD HL,DE
|
||
11BD 23 INC HL
|
||
11BE 22D721 LD (PGBUFP),HL ;STORE IT
|
||
11C1 2B DEC HL ;CALCULATE NO. OF AVAILABLE PAGES
|
||
11C2 EB EX DE,HL ;TOP LOCATION
|
||
11C3 CD0902 CALL MEMTOP
|
||
11C6 7C LD A,H
|
||
11C7 92 SUB D
|
||
11C8 0F RRCA
|
||
11C9 E67F AND 7FH ;SWAPPING SPACE
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 32
|
||
|
||
|
||
11CB FE40 CP MAXPGS
|
||
11CD DAD211 JP C,STAR3A
|
||
11D0 3E40 LD A,MAXPGS
|
||
11D2 32DB21 STAR3A: LD (NPGS),A ;SAVE NUMBER OF PAGES
|
||
11D5 3D DEC A
|
||
11D6 32DD21 LD (PGBOT),A
|
||
11D9 210910 LD HL,PGTBLF
|
||
11DC CD081F CALL HLOFF
|
||
11DF 36FF LD (HL),0FFH ;SET LAST PAGE
|
||
;
|
||
; INITIALIZE RANDOM NUMBER
|
||
;
|
||
11E1 0605 LD B,5
|
||
11E3 21FFFF LD HL,0FFFFH
|
||
11E6 22AC21 LD (SHIFT),HL
|
||
11E9 22AE21 LD (SHIFT+2),HL
|
||
11EC 21E60B LD HL,RDFLG ;SET FLAG TO 1ST READ
|
||
11EF 3600 LD (HL),0
|
||
11F1 CDEE1B START4: CALL RND
|
||
11F4 05 DEC B
|
||
11F5 C2F111 JP NZ,START4
|
||
;
|
||
;
|
||
;
|
||
11F8 AF XOR A
|
||
11F9 32B721 LD (NOLPT),A ;USE LPT
|
||
11FC 2AD921 LD HL,(ZCODEP)
|
||
11FF 110100 LD DE,ZSWAP
|
||
1202 19 ADD HL,DE
|
||
1203 7E LD A,(HL)
|
||
1204 47 LD B,A
|
||
1205 3A5201 LD A,(BSTLIN) ;IS THERE A STATUS LINE?
|
||
1208 B7 OR A
|
||
1209 78 LD A,B
|
||
120A C20F12 JP NZ,START5
|
||
120D F610 OR ZSTATB ;INDICATE NO STATUS LINE
|
||
120F 77 START5: LD (HL),A
|
||
; JP MLOOP ;COMMENTED OUT FOR FALL THROUGH
|
||
;
|
||
; **********************************************************************
|
||
; * *
|
||
; * MAINLOOP *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
;
|
||
;MAIN LOOP, READ AN INSTRUCTION AND ITS ARGS, THEN DISPATCH
|
||
|
||
1210 AF MLOOP: XOR A
|
||
1211 32C321 LD (ARGCNT),A ;ZERO ARG COUNT
|
||
1214 CD5A1D CALL NEXTPC ;GET NEXT OPCODE IN A
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 33
|
||
|
||
|
||
1217 32C421 LD (OPCODE),A ;SAVE IT
|
||
121A FE80 CP 128
|
||
121C DAB612 JP C,OP2 ;2-OP
|
||
121F FEB0 CP 176
|
||
1221 DA8D12 JP C,OP1 ;1-OP
|
||
1224 FEC0 CP 192
|
||
1226 DA8012 JP C,OP0 ;0-OP
|
||
;
|
||
; HANDLE AN X-OP
|
||
;
|
||
1229 CD5A1D OPEXT: CALL NEXTPC ;GET VAR TYPES, THIS IS AN EXT OP
|
||
122C 11BB21 LD DE,ARG1
|
||
122F 0604 LD B,4 ;MAX NUMBER OF ARGS
|
||
1231 4F LD C,A
|
||
1232 C5 OPEXTL: PUSH BC
|
||
1233 D5 PUSH DE
|
||
1234 79 LD A,C
|
||
1235 E6C0 AND 0C0H ;ISOLATE BIT7, BIT6 TO DETERMINE ARG TYPE
|
||
1237 CCED12 CALL Z,GETLNG ;00=LONG IMMEDIATE
|
||
123A FE80 CP 80H
|
||
123C CCFA12 CALL Z,GETVAR ;10=VARIABLE
|
||
123F FE40 CP 40H
|
||
1241 CCE412 CALL Z,GETSHT ;01=SHORT IMMEDIATE
|
||
1244 D1 POP DE
|
||
1245 C1 POP BC
|
||
1246 FEC0 CP 0C0H ;11=NO MORE VARIABLES
|
||
1248 CA5D12 JP Z,OPEXTF ;ALL DONE?
|
||
124B EB EX DE,HL ;NO. STORE VALUE
|
||
124C 73 LD (HL),E
|
||
124D 23 INC HL
|
||
124E 72 LD (HL),D
|
||
124F 23 INC HL
|
||
1250 EB EX DE,HL ;POINTER BACK IN DE
|
||
1251 21C321 LD HL,ARGCNT
|
||
1254 34 INC (HL) ;ONE MORE ARG
|
||
1255 79 LD A,C
|
||
1256 07 RLCA
|
||
1257 07 RLCA ;GET TO NEXT ARG TYPE
|
||
1258 4F LD C,A
|
||
1259 05 DEC B ;DECREMENT ARG COUNT
|
||
125A C23212 JP NZ,OPEXTL ;LOOP FOR MORE
|
||
;
|
||
; DISPATCH THE X-OP
|
||
;
|
||
125D 216214 OPEXTF: LD HL,OPEXTT ;COMPUTE DISPATCH POINTER
|
||
1260 3AC421 LD A,(OPCODE) ;RETRIEVE THE OPCODE
|
||
1263 FEE0 CP 224 ;IS IT AN EXTENDED 2-OP?
|
||
1265 DAD712 JP C,OP2EX ; YES.
|
||
1268 D6E0 SUB 224 ; NO.
|
||
126A FE0A CP OPEXTM ;IS IT A LEGAL X-OP?
|
||
126C D2BF15 JP NC,BADOP ; NO.
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 34
|
||
|
||
|
||
;
|
||
; GENERALIZED DISPATCH
|
||
;
|
||
126F OPDSPH:
|
||
126F 87 ADD A,A ;FORM A WORD OFFSET (*2)
|
||
1270 4F LD C,A ;PUT OFFSET INTO BC
|
||
1271 0600 LD B,0
|
||
1273 09 ADD HL,BC ;ADD OFFSET TO DISPATCH POINTER
|
||
1274 5E LD E,(HL) ;ADDRESS LSB
|
||
1275 23 INC HL
|
||
1276 56 LD D,(HL) ;ADDRESS MSB
|
||
1277 2ABB21 LD HL,(ARG1) ;FIRST ARG
|
||
127A EB EX DE,HL ;HL ^ TABLE ADDRESS OF ROUTINE
|
||
; DE <= FIRST ARG
|
||
127B 3AC321 LD A,(ARGCNT) ;B <= ARG COUNT
|
||
127E 47 LD B,A
|
||
127F E9 JP (HL) ;GO TO IT
|
||
;
|
||
; HANDLE A 0-OP
|
||
;
|
||
1280 D6B0 OP0: SUB 176 ;ADJUST VALUE
|
||
1282 FE0E CP OP0M ;IS IT A LEGAL 0-OP?
|
||
1284 D2BF15 JP NC,BADOP ; NO.
|
||
1287 21F413 LD HL,OP0T ; YES. HL ^ 0-OP TABLE
|
||
128A C36F12 JP OPDSPH ;DISPATCH IT
|
||
;
|
||
; HANDLE A 1-OP
|
||
;
|
||
128D E630 OP1: AND 30H ;1 OP, ISOLATE BITS 5,4
|
||
128F CCED12 CALL Z,GETLNG ;00=LONG IMMEDIATE
|
||
1292 FE10 CP 10H
|
||
1294 CCE412 CALL Z,GETSHT ;01=SHORT IMMEDIATE
|
||
1297 FE20 CP 20H
|
||
1299 CCFA12 CALL Z,GETVAR ;10=VARIABLE
|
||
129C 3E01 LD A,1
|
||
129E 32C321 LD (ARGCNT),A ;1 ARG
|
||
12A1 22BB21 LD (ARG1),HL ;STORE IT
|
||
12A4 3AC421 LD A,(OPCODE) ;RESTORE OPCODE
|
||
12A7 E6CF AND 0CFH ;(NOT 30H) TURN OFF MODE BITS
|
||
12A9 D680 SUB 128 ;ADJUST VALUE
|
||
12AB FE10 CP OP1M ;LEGAL 1-OP?
|
||
12AD D2BF15 JP NC,BADOP ; NO.
|
||
12B0 211014 LD HL,OP1T ; YES. HL ^ 1-OP TABLE
|
||
12B3 C36F12 JP OPDSPH ;DISPATCH IT
|
||
;
|
||
; HANDLE A 2-OP
|
||
;
|
||
12B6 E640 OP2: AND 40H ;ISOLATE 1ST. ARG BIT
|
||
12B8 C4FA12 CALL NZ,GETVAR ;1=VARIABLE
|
||
12BB CCE412 CALL Z,GETSHT ;0=SHORT IMMEDIATE
|
||
12BE 22BB21 LD (ARG1),HL ;STORE ARG1
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 35
|
||
|
||
|
||
12C1 3AC421 LD A,(OPCODE) ;RESTORE OPCODE
|
||
12C4 E620 AND 20H ;ISOLATE 2ND. ARG BIT
|
||
12C6 C4FA12 CALL NZ,GETVAR ;1=VARIABLE
|
||
12C9 CCE412 CALL Z,GETSHT ;2=SHORT IMMEDIATE
|
||
12CC 22BD21 LD (ARG2),HL ;STORE ARG 2
|
||
12CF 3E02 LD A,2
|
||
12D1 32C321 LD (ARGCNT),A ;TWO ARGS
|
||
12D4 3AC421 LD A,(OPCODE) ;RESTORE OPCODE
|
||
12D7 E61F OP2EX: AND 1FH ;(NOT 0E0H) TURN OFF MODE BITS
|
||
12D9 FE19 CP OP2M ;LEGAL 2-OP?
|
||
12DB D2BF15 JP NC,BADOP ; NO.
|
||
12DE 213014 LD HL,OP2T ; YES. HL ^ 2-OP TABLE
|
||
12E1 C36F12 JP OPDSPH ;DISPATCH IT
|
||
;
|
||
;*************************************
|
||
;* OPCODE ARGUMENT FETCH SUBROUTINES *
|
||
;*************************************
|
||
;
|
||
; -----------------------
|
||
; FETCH A SHORT IMMEDIATE
|
||
; -----------------------
|
||
12E4 F5 GETSHT: PUSH AF ;SAVE OPCODE
|
||
12E5 CD5A1D CALL NEXTPC ;GET NEXT ZBYTE
|
||
12E8 6F LD L,A ;MAKING IT THE LSB OF ARGUMENT
|
||
12E9 2600 LD H,0 ;MSB IS 0
|
||
12EB F1 POP AF ;RESTORE OPCODE
|
||
12EC C9 RET
|
||
; ----------------------
|
||
; FETCH A LONG IMMEDIATE
|
||
; ----------------------
|
||
12ED F5 GETLNG: PUSH AF ;SAVE OPCODE
|
||
12EE CD5A1D CALL NEXTPC ;GET NEXT ZBYTE
|
||
12F1 67 LD H,A ;MAKING IT THE MSB OF ARGUMENT
|
||
12F2 E5 PUSH HL ;SAVE IT ON THE STACK
|
||
12F3 CD5A1D CALL NEXTPC ;GET NEXT ZBYTE
|
||
12F6 E1 POP HL ;RESTORE MSB OF ARGUMENT
|
||
12F7 6F LD L,A ;AND FILL IN LSB OF ARGUMENT
|
||
12F8 F1 POP AF ;RESTORE OPCODE
|
||
12F9 C9 RET
|
||
; ----------------
|
||
; FETCH A VARIABLE
|
||
; ----------------
|
||
12FA F5 GETVAR: PUSH AF ;GET VAR, FIRST FIND TYPE
|
||
12FB CD5A1D CALL NEXTPC
|
||
12FE B7 OR A
|
||
12FF CA2213 JP Z,GETVRS ;FROM STACK
|
||
1302 FE10 GETVR1: CP 16
|
||
1304 D21613 JP NC,GETVRG ;GLOBAL
|
||
1307 3D GETVRL: DEC A ;LOCAL
|
||
1308 87 ADD A,A
|
||
1309 5F LD E,A
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 36
|
||
|
||
|
||
130A 1600 LD D,0
|
||
130C 218721 LD HL,LOCALS
|
||
130F 19 GETVL1: ADD HL,DE ;POINTER TO VARIABLE
|
||
1310 56 LD D,(HL)
|
||
1311 23 INC HL
|
||
1312 5E LD E,(HL)
|
||
1313 EB EX DE,HL ;RETURN VALUE IN HL
|
||
1314 F1 POP AF
|
||
1315 C9 RET
|
||
;
|
||
1316 D610 GETVRG: SUB 16
|
||
1318 5F LD E,A ;GET GLOBAL
|
||
1319 1600 LD D,0
|
||
131B 2AC521 LD HL,(GLOBAL)
|
||
131E 19 ADD HL,DE ;PRE ADD SO IT GETS DONE TWICE
|
||
131F C30F13 JP GETVL1
|
||
;
|
||
1322 CD451D GETVRS: CALL POPSTK ;VAR FROM STACK
|
||
1325 F1 POP AF
|
||
1326 C9 RET
|
||
;
|
||
;*********************
|
||
;* MISC. SUBROUTINES *
|
||
;*********************
|
||
1327 AF RET0: XOR A ;RETURN 0
|
||
1328 6F PUTBYT: LD L,A
|
||
1329 2600 LD H,0
|
||
132B CD3113 PUTVAL: CALL PUTVLC ;STORE VALUE
|
||
132E C31012 JP MLOOP
|
||
;
|
||
1331 E5 PUTVLC: PUSH HL ;SAVE VALUE
|
||
1332 CD5A1D CALL NEXTPC ;GET TYPE
|
||
1335 E1 POP HL
|
||
1336 B7 PUTVR1: OR A
|
||
1337 CA2C1D JP Z,PSHSTK ;SAVE ON STACK AND RETURN
|
||
133A EB EX DE,HL ;VALUE IN DE
|
||
133B FE10 CP 16
|
||
133D D24D13 JP NC,PUTVLG ;GLOBAL
|
||
1340 3D PUTVLL: DEC A ;LOCAL
|
||
1341 87 ADD A,A
|
||
1342 4F LD C,A
|
||
1343 0600 LD B,0
|
||
1345 218721 LD HL,LOCALS
|
||
1348 09 PUTVL1: ADD HL,BC ;COMPUTE ADDRESS
|
||
1349 72 LD (HL),D
|
||
134A 23 INC HL
|
||
134B 73 LD (HL),E
|
||
134C C9 RET
|
||
;
|
||
134D D610 PUTVLG: SUB 16
|
||
134F 4F LD C,A ;STORE GLOBAL
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 37
|
||
|
||
|
||
1350 0600 LD B,0
|
||
1352 2AC521 LD HL,(GLOBAL) ;GLOBAL POINTER
|
||
1355 09 ADD HL,BC ;PRE ADD
|
||
1356 C34813 JP PUTVL1
|
||
;
|
||
;*********************
|
||
;* DATA MANIPULATION *
|
||
;*********************
|
||
;
|
||
; -----------------
|
||
; RECALL A VARIABLE
|
||
; -----------------
|
||
1359 F5 VARGET: PUSH AF ;SAVE OPCODE
|
||
135A B7 OR A ;IF NON-ZERO
|
||
135B C20213 JP NZ,GETVR1 ; THEN GET A VARIABLE FROM LOCAL OR GLOBAL TABLE
|
||
; ELSE TAKE VAR OFF STACK
|
||
135E F1 VARGTS: POP AF ;RESTORE OPCODE
|
||
135F CD451D CALL POPSTK ;POP A WORD FROM ZSTACK
|
||
1362 C32C1D JP PSHSTK ;PUT IT BACK AND RETURN THE VALUE IN HL
|
||
; ----------------
|
||
; STORE A VARIABLE
|
||
; ----------------
|
||
1365 B7 VARPUT: OR A ;IF NON-ZERO
|
||
1366 C23613 JP NZ,PUTVR1 ; THEN PUT A VARIABLE IN LOCAL OR GLOBAL TABLE
|
||
; ELSE REPLACE A WORD ON Z-STACK
|
||
1369 E5 VARPTS: PUSH HL ;SAVE NEW VALUE
|
||
136A CD451D CALL POPSTK ;POP OLD WORD OFF Z-STACK
|
||
136D E1 POP HL ;RESTORE NEW VALUE
|
||
136E C32C1D JP PSHSTK ;AND PUSH IT ON TOP OF ZSTACK
|
||
;
|
||
;************************
|
||
;* PREDICATE PROCESSING *
|
||
;************************
|
||
;
|
||
; ---------------
|
||
; PREDICATE FAILS
|
||
; ---------------
|
||
1371 CD5A1D PREDF: CALL NEXTPC ;FETCH NEXT BYTE OF ZCODE
|
||
1374 B7 OR A
|
||
1375 F28713 JP P,PREDB ;BRANCH IF < 128
|
||
1378 E640 PREDNB: AND 40H ;CHECK FOR MULTI BYTE HACK
|
||
137A CC5A1D CALL Z,NEXTPC ;GET NEXT BYTE IF SO
|
||
137D C31012 JP MLOOP ;CONTINUE IN SEQUENCE
|
||
; ------------------
|
||
; PREDICATE SUCCEEDS
|
||
; ------------------
|
||
1380 CD5A1D PREDS: CALL NEXTPC ;FETCH NEXT BYTE OF ZCODE
|
||
1383 B7 OR A ;IF BIT 7 IS NOT SET
|
||
1384 F27813 JP P,PREDNB ;BRANCH ON PREDICATE FAILURE
|
||
; ELSE FALL THROUGH TO PREDB
|
||
; ----------------
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 38
|
||
|
||
|
||
; PERFORM A BRANCH
|
||
; ----------------
|
||
1387 47 PREDB: LD B,A ;SAVE OPCODE
|
||
1388 E640 AND 40H ;LONG BRANCH?
|
||
138A CA9613 JP Z,PREDLB ; YES. (BIT 6 WAS OFF)
|
||
; NO. SHORT BRANCH
|
||
138D 78 LD A,B ;RESTORE OPCODE
|
||
138E E63F AND 3FH ;FORM SHORT OFFSET
|
||
1390 4F LD C,A ;USE AS LSB OF BRANCH OFFSET
|
||
1391 0600 LD B,0 ;ZERO MSB OF OFFSET
|
||
1393 C3AA13 JP PREDB1 ;SIMULATE LONG BRANCH TO A CLOSE PLACE
|
||
;
|
||
; HANDLE A LONG BRANCH
|
||
1396 78 PREDLB: LD A,B ;RESTORE OPCODE
|
||
1397 E63F AND 3FH ;FORM MSB OF OFFSET
|
||
1399 47 LD B,A ;B <= MSB OF OFFSET
|
||
139A C5 PUSH BC
|
||
139B CD5A1D CALL NEXTPC ;GET SECOND BYTE
|
||
139E C1 POP BC
|
||
139F 4F LD C,A ;C <= LSB OF OFFSET
|
||
13A0 78 LD A,B ;A <= MSB OF OFFSET
|
||
13A1 E620 AND 20H ;CHECK SIGN OF 14 BIT VALUE
|
||
13A3 CAAA13 JP Z,PREDB1 ;POSITIVE
|
||
13A6 78 LD A,B ;ELSE EXTEND THE SIGN (A <= MSB)
|
||
13A7 F6C0 OR 0C0H ;AND MAKE THE FULL WORD NEG
|
||
13A9 47 LD B,A ;SAVE THE RESULT IN B
|
||
;
|
||
; BRANCH TO THE Z-ADDRESS AT $(ZPC) + OFFSET (IN BC)
|
||
; (ZPC RELATIVE ADDRESSING)
|
||
13AA 78 PREDB1: LD A,B
|
||
13AB B1 OR C ;IS OFFSET=0?
|
||
13AC CA7F14 JP Z,RFALSE ; YES. DO AN RFALSE
|
||
13AF 0B DEC BC
|
||
13B0 78 LD A,B
|
||
13B1 B1 OR C ;WAS OFFSET=1
|
||
13B2 CA7614 JP Z,RTRUE ; YES. DO AN RTRUE
|
||
13B5 0B PREDB3: DEC BC ;2 NOW SUBTRACTED FROM JUMP ADDRESS
|
||
13B6 60 LD H,B ;HL <= JUMP ADDRESS
|
||
13B7 69 LD L,C
|
||
13B8 22CA21 LD (ZPCOFF),HL ;ZPCOFF <= JUMP ADDRESS
|
||
13BB 2AA621 LD HL,(ZPCL) ;HL <= LOW ORDER 9 BITS OF ZIP PROGRAM COUNTER
|
||
13BE 59 LD E,C ;E <= LSB OF JUMP ADDRESS
|
||
13BF 78 LD A,B ;A <= MSB OF JUMP ADDRESS
|
||
13C0 E601 AND 1
|
||
13C2 57 LD D,A ;ZPCL ADDER
|
||
13C3 78 LD A,B ;ARITHMETICALLY SHIFT B RIGHT 1
|
||
13C4 07 RLCA ;FIRST SET CARRY
|
||
13C5 78 LD A,B
|
||
13C6 1F RRA
|
||
13C7 47 LD B,A ;CUTE
|
||
13C8 19 ADD HL,DE
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 39
|
||
|
||
|
||
13C9 7C LD A,H
|
||
13CA E602 AND 2
|
||
13CC CAD213 JP Z,PREDB2 ;NO OVERFLOW
|
||
13CF 25 DEC H
|
||
13D0 25 DEC H ;OVERFLOW
|
||
13D1 04 INC B
|
||
13D2 22A621 PREDB2: LD (ZPCL),HL ;STORE LOW BYTES
|
||
13D5 21A521 LD HL,ZPCH ;MODIFY UPPER
|
||
13D8 78 LD A,B
|
||
13D9 B7 OR A
|
||
13DA CAE613 JP Z,PREDB4 ;NO CHANGE IN PACE, DO FASTER JUMP
|
||
13DD 86 ADD A,(HL)
|
||
13DE 77 LD (HL),A
|
||
13DF AF XOR A
|
||
13E0 32CE21 LD (ZPCFLG),A ;CHANGED PAGES
|
||
13E3 C31012 JP MLOOP ;FINISHED
|
||
;
|
||
13E6 2ACC21 PREDB4: LD HL,(ZPCPNT)
|
||
13E9 EB EX DE,HL
|
||
13EA 2ACA21 LD HL,(ZPCOFF)
|
||
13ED 19 ADD HL,DE ;CALCULATE NEW PC POINTER
|
||
13EE 22CC21 LD (ZPCPNT),HL
|
||
13F1 C31012 JP MLOOP
|
||
;
|
||
; **********************************************************************
|
||
; * *
|
||
; * OPCODE PROCESSING SECTION *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
; ****************************
|
||
; * DISPATCH TABLES *
|
||
; ****************************
|
||
;
|
||
; -----
|
||
; 0-OPS
|
||
; -----
|
||
13F4 7614 OP0T: DW RTRUE ;0
|
||
13F6 7F14 DW RFALSE ;1
|
||
13F8 8514 DW PRINTI ;2
|
||
13FA B714 DW PRINTR ;3
|
||
13FC C014 DW ZNOP ;4
|
||
13FE C314 DW ZSAVE ;5
|
||
1400 C614 DW ZRSTOR ;6
|
||
1402 C914 DW ZRSTAR ;7
|
||
1404 CC14 DW RSTACK ;8
|
||
1406 D514 DW FSTACK ;9
|
||
1408 DB14 DW ZQUIT ;10
|
||
140A DE14 DW CRLF ;11
|
||
140C E414 DW USL ;12
|
||
140E EA14 DW VERIFY ;13
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 40
|
||
|
||
|
||
000E OP0M EQU ($-OP0T)/2 ;NUMBER OF 0-OPS
|
||
;
|
||
; -----
|
||
; 1-OPS
|
||
; -----
|
||
1410 4215 OP1T: DW ZEROQ ;0
|
||
1412 4D15 DW NEXTQ ;1
|
||
1414 5915 DW FIRSTQ ;2
|
||
1416 7315 DW LOC ;3
|
||
1418 8315 DW PTSIZE ;4
|
||
141A 9315 DW INC ;5
|
||
141C 9915 DW DEC ;6
|
||
141E B615 DW PRINTB ;7
|
||
1420 BF15 DW BADOP ;8 (UNDEFINED)
|
||
1422 C215 DW REMOVE ;9
|
||
1424 1816 DW PRINTD ;10
|
||
1426 3316 DW RETURN ;11
|
||
1428 7E16 DW JUMP ;12
|
||
142A 8716 DW PRINT ;13
|
||
142C 9316 DW VALUE ;14
|
||
142E 9C16 DW BCOM ;15
|
||
0010 OP1M EQU ($-OP1T)/2 ;NUMBER OF 1-OPS
|
||
;
|
||
; -----
|
||
; 2-OPS
|
||
; -----
|
||
1430 BF15 OP2T: DW BADOP
|
||
1432 C218 DW EQUALQ
|
||
1434 A816 DW LESSQ
|
||
1436 B516 DW GRTRQ
|
||
1438 C116 DW DLESSQ
|
||
143A CC16 DW IGRTRQ
|
||
143C DC16 DW INQ
|
||
143E F016 DW BTST
|
||
1440 0217 DW BOR
|
||
1442 0E17 DW BAND
|
||
1444 1A17 DW FSETQ
|
||
1446 2917 DW FSET
|
||
1448 3617 DW FCLEAR
|
||
144A 4517 DW ZSET
|
||
144C 5117 DW MOVE
|
||
144E 7D17 DW GET
|
||
1450 8F17 DW GETB
|
||
1452 A317 DW GETP
|
||
1454 EF17 DW GETPT
|
||
1456 1418 DW NEXTP
|
||
1458 3E18 DW ZADD
|
||
145A 4518 DW ZSUB
|
||
145C 5118 DW MUL
|
||
145E 7D18 DW DIV
|
||
1460 B418 DW ZMOD
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 41
|
||
|
||
|
||
0019 OP2M EQU ($-OP2T)/2
|
||
;
|
||
; -----
|
||
; X-OPS
|
||
; -----
|
||
1462 EF18 OPEXTT: DW ZCALL
|
||
1464 7B19 DW PUT
|
||
1466 9419 DW PUTB
|
||
1468 A819 DW PUTP
|
||
146A DA19 DW ZREAD
|
||
146C 841B DW PRINTC
|
||
146E 8E1B DW PRINTN
|
||
1470 CD1B DW RANDOM
|
||
1472 DC1B DW ZPUSH
|
||
1474 E51B DW ZPOP
|
||
000A OPEXTM EQU ($-OPEXTT)/2
|
||
; **********************************************************************
|
||
; * *
|
||
; * ZCODE EXECUTION ROUTINES *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
; *******************
|
||
; * 0-OPS *
|
||
; *******************
|
||
;
|
||
;
|
||
; ----------
|
||
; RTRUE [0]
|
||
; ----------
|
||
; SIMULATE A RETURN 1
|
||
1476 210100 RTRUE: LD HL,1
|
||
1479 22BB21 RTRUE1: LD (ARG1),HL
|
||
147C C33316 JP RETURN
|
||
;
|
||
; -----------
|
||
; RFALSE [1]
|
||
; -----------
|
||
; SIMULATE A RETURN 0
|
||
147F 210000 RFALSE: LD HL,0
|
||
1482 C37914 JP RTRUE1
|
||
;
|
||
; -----------
|
||
; PRINTI [2]
|
||
; -----------
|
||
; PRINT THE Z-STRING IMMEDIATELY FOLLOWING THE OPCODE
|
||
1485 CD8B14 PRINTI: CALL PRNTI1
|
||
1488 C31012 JP MLOOP
|
||
;
|
||
148B 2AA621 PRNTI1: LD HL,(ZPCL)
|
||
148E 22D121 LD (MPCL),HL ;SET UP MPC TO EQUAL ZPC
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 42
|
||
|
||
|
||
1491 3AA521 LD A,(ZPCH)
|
||
1494 32D021 LD (MPCH),A
|
||
1497 AF XOR A
|
||
1498 32D521 LD (MPCFLG),A ;ZERO MPC FLAG
|
||
149B CD291F CALL PZSTR ;PRINT THE STRING
|
||
149E 2AD121 LD HL,(MPCL) ;NOW CHANGE BACK ZPC TO END OF STRING
|
||
14A1 22A621 LD (ZPCL),HL
|
||
14A4 3AD021 LD A,(MPCH)
|
||
14A7 32A521 LD (ZPCH),A
|
||
14AA 3AD521 LD A,(MPCFLG)
|
||
14AD 32CE21 LD (ZPCFLG),A ;UPDATE FLAG
|
||
14B0 2AD321 LD HL,(MPCPNT)
|
||
14B3 22CC21 LD (ZPCPNT),HL ;AND PAGE POINTER
|
||
14B6 C9 RET
|
||
;
|
||
; -----------
|
||
; PRINTR [3]
|
||
; -----------
|
||
; EXECUTE A PRINTI, FOLLOWED BY A CRLF, AND A RTRUE
|
||
14B7 CD8B14 PRINTR: CALL PRNTI1
|
||
14BA CDB404 CALL PCRLF
|
||
14BD C37614 JP RTRUE
|
||
;
|
||
; ---------
|
||
; ZNOP [4]
|
||
; ---------
|
||
; EXECUTE A NOP
|
||
14C0 C31012 ZNOP: JP MLOOP
|
||
;
|
||
; ----------
|
||
; ZSAVE [5]
|
||
; ----------
|
||
; SAVE GAME
|
||
14C3 C37007 ZSAVE: JP SAVE ;MACHINE DEPENDENT
|
||
;
|
||
; -----------
|
||
; ZRSTOR [6]
|
||
; -----------
|
||
; RESTORE SAVED GAME
|
||
14C6 C3930A ZRSTOR: JP RESTOR ;MACHINE DEPENDENT
|
||
;
|
||
; -----------
|
||
; ZRSTAR [7]
|
||
; -----------
|
||
; RESTART GAME
|
||
14C9 C35F07 ZRSTAR: JP RESTAR ;MACHINE DEPENDENT
|
||
;
|
||
; -----------
|
||
; RSTACK [8]
|
||
; -----------
|
||
; EXECUTE A RETURN WITH CALL VALUE ON TOP OF THE STACK
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 43
|
||
|
||
|
||
14CC CD451D RSTACK: CALL POPSTK
|
||
14CF 22BB21 LD (ARG1),HL
|
||
14D2 C33316 JP RETURN
|
||
;
|
||
; -----------
|
||
; FSTACK [9]
|
||
; -----------
|
||
14D5 CD451D FSTACK: CALL POPSTK
|
||
14D8 C31012 JP MLOOP
|
||
;
|
||
; -----------
|
||
; ZQUIT [10]
|
||
; -----------
|
||
14DB C34907 ZQUIT: JP QUIT ;MACHINE DEPENDENT
|
||
;
|
||
; ----------
|
||
; CRLF [11]
|
||
; ----------
|
||
; PRINT CARRIAGE RETURN/LINE FEED
|
||
14DE CDB404 CRLF: CALL PCRLF
|
||
14E1 C31012 JP MLOOP
|
||
;
|
||
; ---------
|
||
; USL [12]
|
||
; ---------
|
||
; UPDATE STATUS LINE
|
||
14E4 CDC105 USL: CALL WHOLIN
|
||
14E7 C31012 JP MLOOP
|
||
;
|
||
; ------------
|
||
; VERIFY [13]
|
||
; ------------
|
||
; VERIFY THE GAME CODE
|
||
14EA 3E01 VERIFY: LD A,1 ;SELF CHECK
|
||
14EC 32B821 LD (VERF),A ;IN VERIFY MODE, ALWAYS GET NEW PAGE
|
||
14EF 218910 LD HL,VRS
|
||
14F2 CD660A CALL MSGOUT ;OUTPUT LAST UPDATE
|
||
14F5 219A10 LD HL,VRLINE
|
||
14F8 CD660A CALL MSGOUT ;OUTPUT VERSION
|
||
14FB 2AD921 LD HL,(ZCODEP) ;^ TOP OF ZCODE
|
||
14FE 111A00 LD DE,ZCKLEN
|
||
1501 19 ADD HL,DE
|
||
1502 56 LD D,(HL)
|
||
1503 23 INC HL
|
||
1504 5E LD E,(HL)
|
||
1505 21E0FF LD HL,-32
|
||
1508 19 ADD HL,DE
|
||
1509 EB EX DE,HL ;DE HAVE COUNT
|
||
150A 010000 LD BC,0 ;SUM IN BC
|
||
150D 214000 LD HL,32*2
|
||
1510 CDE41D CALL SETWRD
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 44
|
||
|
||
|
||
1513 C5 VERIFL: PUSH BC
|
||
1514 D5 PUSH DE
|
||
1515 CD251E CALL GETWRD ;GUARENTEED TO GET FRESH WORD
|
||
1518 D1 POP DE
|
||
1519 C1 POP BC
|
||
151A 7C LD A,H
|
||
151B 2600 LD H,0
|
||
151D 09 ADD HL,BC
|
||
151E CD081F CALL HLOFF
|
||
1521 44 LD B,H
|
||
1522 4D LD C,L ;TOTAL IN BC
|
||
1523 1B DEC DE
|
||
1524 7A LD A,D
|
||
1525 B3 OR E
|
||
1526 C21315 JP NZ,VERIFL ;SUM ALL BYTES
|
||
1529 111C00 LD DE,ZCKSUM
|
||
152C 2AD921 LD HL,(ZCODEP)
|
||
152F 19 ADD HL,DE
|
||
1530 56 LD D,(HL)
|
||
1531 23 INC HL
|
||
1532 5E LD E,(HL) ;GET CHECKSUM
|
||
1533 60 LD H,B
|
||
1534 69 LD L,C
|
||
1535 AF XOR A
|
||
1536 32B821 LD (VERF),A
|
||
1539 CD251D CALL HLGEDE ;COMPARE CALCULATED WITH ACTUAL
|
||
153C CA8013 JP Z,PREDS
|
||
153F C37113 JP PREDF ;FAIL IF DIFFERENT
|
||
;
|
||
; *******************
|
||
; * 1-OPS *
|
||
; *******************
|
||
;
|
||
; ----------
|
||
; ZERO? [0]
|
||
; ----------
|
||
; IS ARG1 EQUAL TO ZERO? [PRED]
|
||
1542 2ABB21 ZEROQ: LD HL,(ARG1)
|
||
1545 7C LD A,H
|
||
1546 B5 OR L
|
||
1547 CA8013 JP Z,PREDS
|
||
154A C37113 JP PREDF
|
||
;
|
||
; ----------
|
||
; NEXT? [1]
|
||
; ----------
|
||
; RETURN THE NEXT POINTER IN OBJRCT "ARG1"; FAIL IF
|
||
; NONE LEFT, AND RETURN ZERO [VALUE][PRED]
|
||
154D 3ABB21 NEXTQ: LD A,(ARG1)
|
||
1550 CDF41C CALL OBJLOC
|
||
1553 110500 LD DE,5
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 45
|
||
|
||
|
||
1556 C36215 JP FRSTQ1 ;SAME AS FIRST?
|
||
;
|
||
; -----------
|
||
; FIRST? [2]
|
||
; -----------
|
||
; RETURN THE FIRST POINTER IN OBJECT "ARG1"; FAIL IF
|
||
; NONE, AND RETURN ZERO [VALUE][PRED]
|
||
;
|
||
1559 3ABB21 FIRSTQ: LD A,(ARG1)
|
||
155C CDF41C CALL OBJLOC
|
||
155F 110600 LD DE,6
|
||
1562 19 FRSTQ1: ADD HL,DE
|
||
1563 7E LD A,(HL)
|
||
1564 F5 PUSH AF ;SAVE VALUE
|
||
1565 6F LD L,A
|
||
1566 2600 LD H,0
|
||
1568 CD3113 CALL PUTVLC ;STORE VALUE
|
||
156B F1 POP AF
|
||
156C B7 OR A
|
||
156D C28013 JP NZ,PREDS ;FOUND FIRST
|
||
1570 C37113 JP PREDF ;FIRST NOT FOUND
|
||
;
|
||
; --------
|
||
; LOC [3]
|
||
; --------
|
||
; RETURN THE OBJECT CONTAINING OBJECT "ARG1"; ZERO IF NONE [VALUE]
|
||
1573 3ABB21 LOC: LD A,(ARG1)
|
||
1576 CDF41C CALL OBJLOC
|
||
1579 110400 LD DE,4
|
||
157C 19 ADD HL,DE
|
||
157D 6E LD L,(HL)
|
||
157E 2600 LD H,0
|
||
1580 C32B13 JP PUTVAL
|
||
;
|
||
; -----------
|
||
; PTSIZE [4]
|
||
; -----------
|
||
; RETURN LENGTH OF PROP TABLE "ARG1" IN BYTES [VALUE]
|
||
1583 2ABB21 PTSIZE: LD HL,(ARG1)
|
||
1586 EB EX DE,HL
|
||
1587 2AD921 LD HL,(ZCODEP)
|
||
158A 19 ADD HL,DE ;POINTER TO PROP ENTRY
|
||
158B 2B DEC HL
|
||
158C CDE51C CALL PROPL
|
||
158F 3C INC A
|
||
1590 C32813 JP PUTBYT
|
||
;
|
||
; --------
|
||
; INC [5]
|
||
; --------
|
||
; INCREMENT ARG1 [VALUE]
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 46
|
||
|
||
|
||
1593 CD9F15 INC: CALL INC1
|
||
1596 C31012 JP MLOOP
|
||
;
|
||
; --------
|
||
; DEC [6]
|
||
; --------
|
||
; DECREMENT ARG1 [VALUE]
|
||
1599 CDAC15 DEC: CALL DEC1
|
||
159C C31012 JP MLOOP
|
||
;
|
||
159F 3ABB21 INC1: LD A,(ARG1)
|
||
15A2 CD5913 CALL VARGET
|
||
15A5 23 INC HL
|
||
15A6 E5 INC2: PUSH HL
|
||
15A7 CD6513 CALL VARPUT
|
||
15AA E1 POP HL
|
||
15AB C9 RET
|
||
;
|
||
15AC 3ABB21 DEC1: LD A,(ARG1)
|
||
15AF CD5913 CALL VARGET
|
||
15B2 2B DEC HL
|
||
15B3 C3A615 JP INC2
|
||
;
|
||
; -----------
|
||
; PRINTB [7]
|
||
; -----------
|
||
; PRINT THE STRING POINTED TO BY BYTE POINTER ARG1
|
||
15B6 2ABB21 PRINTB: LD HL,(ARG1)
|
||
15B9 CDE41D PRINT2: CALL SETWRD
|
||
15BC C38D16 JP PRINT1
|
||
;
|
||
; ----------
|
||
; BADOP [8]
|
||
; ----------
|
||
15BF C31012 BADOP: JP MLOOP
|
||
;
|
||
; -----------
|
||
; REMOVE [9]
|
||
; -----------
|
||
; MOVE OBJECT [ARG1] TO PSEUDO-OBJECT #0
|
||
15C2 CDC815 REMOVE: CALL REMOVC
|
||
15C5 C31012 JP MLOOP
|
||
;
|
||
15C8 3ABB21 REMOVC: LD A,(ARG1)
|
||
15CB 47 LD B,A ;SAVE IT
|
||
15CC CDF41C CALL OBJLOC
|
||
15CF EB EX DE,HL ;SAVE IN DE
|
||
15D0 210400 LD HL,4
|
||
15D3 19 ADD HL,DE
|
||
15D4 7E LD A,(HL)
|
||
15D5 B7 OR A
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 47
|
||
|
||
|
||
15D6 C8 RET Z ;NO OBJECT
|
||
15D7 D5 PUSH DE ;SAVE VALUE
|
||
15D8 CDF41C CALL OBJLOC ;PARENT OBJECT
|
||
15DB 110600 LD DE,6
|
||
15DE EB EX DE,HL ;LP IN D
|
||
15DF 19 ADD HL,DE
|
||
15E0 4E LD C,(HL) ;SIBL
|
||
15E1 78 LD A,B
|
||
15E2 B9 CP C
|
||
15E3 C2F515 JP NZ,REMVC1 ;NOT SAME
|
||
15E6 E1 POP HL
|
||
15E7 E5 PUSH HL ;L1
|
||
15E8 010500 LD BC,5
|
||
15EB 09 ADD HL,BC
|
||
15EC 7E LD A,(HL)
|
||
15ED 210600 LD HL,6 ;PARENT'S FIRST SLOT GETS LOC SLOT
|
||
15F0 19 ADD HL,DE
|
||
15F1 77 LD (HL),A
|
||
15F2 C30D16 JP REMVC2
|
||
|
||
15F5 79 REMVC1: LD A,C ;GET SIBL
|
||
15F6 CDF41C CALL OBJLOC
|
||
15F9 110500 LD DE,5
|
||
15FC 19 ADD HL,DE
|
||
15FD 54 LD D,H
|
||
15FE 5D LD E,L ;SAVE LS+5
|
||
15FF 4E LD C,(HL) ;NEW SIBL
|
||
1600 78 LD A,B
|
||
1601 B9 CP C
|
||
1602 C2F515 JP NZ,REMVC1 ;NOT END OF CHAIN
|
||
1605 010500 LD BC,5
|
||
1608 E1 POP HL
|
||
1609 E5 PUSH HL
|
||
160A 09 ADD HL,BC ;OLD NEXT
|
||
160B 7E LD A,(HL)
|
||
160C 12 LD (DE),A
|
||
160D E1 REMVC2: POP HL
|
||
160E 110400 LD DE,4
|
||
1611 19 ADD HL,DE
|
||
1612 3600 LD (HL),0
|
||
1614 23 INC HL
|
||
1615 3600 LD (HL),0
|
||
1617 C9 RET
|
||
; ------------
|
||
; PRINTD [10]
|
||
; ------------
|
||
; PRINT SHORT DESCRIPTION OF OBJECT [ARG1]
|
||
1618 3ABB21 PRINTD: LD A,(ARG1)
|
||
161B CD2116 CALL PRNTDC
|
||
161E C31012 JP MLOOP
|
||
;
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 48
|
||
|
||
|
||
1621 CDF41C PRNTDC: CALL OBJLOC
|
||
1624 110700 LD DE,7
|
||
1627 19 ADD HL,DE
|
||
1628 56 LD D,(HL)
|
||
1629 23 INC HL
|
||
162A 5E LD E,(HL)
|
||
162B EB EX DE,HL
|
||
162C 23 INC HL
|
||
162D CDE41D CALL SETWRD
|
||
1630 C3291F JP PZSTR
|
||
;
|
||
; ------------
|
||
; RETURN [11]
|
||
; ------------
|
||
; RETURN FROM A CALL WITH VALUE ARG1
|
||
1633 2AA921 RETURN: LD HL,(OZSTKP) ;RESET STACK FROM CALL
|
||
1636 22070E LD (ZSTAKP),HL
|
||
1639 3AAB21 LD A,(OZSTKC)
|
||
163C 32A821 LD (ZSTAKC),A
|
||
163F CD451D CALL POPSTK ;RESET Z-STACK
|
||
1642 7D LD A,L
|
||
1643 32A521 LD (ZPCH),A ;SAVE UPPER PC
|
||
1646 44 LD B,H ;H HAS NUMBER OF LOCALS
|
||
1647 7C LD A,H
|
||
1648 87 ADD A,A ;WORD
|
||
1649 CA6116 JP Z,RET2 ;NO LOCALS
|
||
164C 218521 LD HL,LOCALS-2
|
||
164F CD081F CALL HLOFF ;POSITION HL TO RESTORE LOCALS
|
||
1652 EB RET1: EX DE,HL
|
||
1653 CD451D CALL POPSTK ;GET THE LOCAL, REVERSE ORDER FIRST
|
||
1656 EB EX DE,HL
|
||
1657 72 LD (HL),D
|
||
1658 23 INC HL
|
||
1659 73 LD (HL),E
|
||
165A 2B DEC HL ;NOW BACK UP ONE ELEMENT
|
||
165B 2B DEC HL
|
||
165C 2B DEC HL
|
||
165D 05 DEC B
|
||
165E C25216 JP NZ,RET1 ;LOOP
|
||
1661 CD451D RET2: CALL POPSTK
|
||
1664 22A621 LD (ZPCL),HL ;REST OF PC
|
||
1667 CD451D CALL POPSTK
|
||
166A 22A921 LD (OZSTKP),HL
|
||
166D CD451D CALL POPSTK
|
||
1670 7D LD A,L
|
||
1671 32AB21 LD (OZSTKC),A ;RESTORE OLD VALUES
|
||
1674 AF XOR A
|
||
1675 32CE21 LD (ZPCFLG),A ;PC CHANGED
|
||
1678 2ABB21 LD HL,(ARG1) ;ARGUMENT TO BE RETURNED
|
||
167B C32B13 JP PUTVAL ;STORE AND RETURN
|
||
;
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 49
|
||
|
||
|
||
; ----------
|
||
; JUMP [12]
|
||
; ----------
|
||
; BRANCH TO Z-LOCATION POINTED TO BY 16-BIT 2'S COMPLIMENT ARG1
|
||
167E 2ABB21 JUMP: LD HL,(ARG1) ;RELATIVE JUMP
|
||
1681 44 LD B,H
|
||
1682 4D LD C,L
|
||
1683 0B DEC BC
|
||
1684 C3B513 JP PREDB3 ;TREAT AS A SUCCESSFUL JUMP
|
||
;
|
||
; -----------
|
||
; PRINT [13]
|
||
; -----------
|
||
; PRINT THE Z-STRING POINTED TO BY THE WORD-POINTER ARG1
|
||
1687 2ABB21 PRINT: LD HL,(ARG1) ;TELL SETSTR WHERE THE STRING
|
||
168A CDF61D CALL SETSTR ;RESIDES AND
|
||
168D CD291F PRINT1: CALL PZSTR ;PRINT THE STRING
|
||
1690 C31012 JP MLOOP
|
||
;
|
||
; -----------
|
||
; VALUE [14]
|
||
; -----------
|
||
; RETURN VALUE OF ARG1 [VALUE]
|
||
1693 3ABB21 VALUE: LD A,(ARG1)
|
||
1696 CD5913 CALL VARGET
|
||
1699 C32B13 JP PUTVAL
|
||
;
|
||
; ----------
|
||
; BCOM [15]
|
||
; ----------
|
||
; COMPLIMENT ARG1 [VALUE]
|
||
169C 2ABB21 BCOM: LD HL,(ARG1)
|
||
169F 7C LD A,H
|
||
16A0 2F CPL
|
||
16A1 67 LD H,A
|
||
16A2 7D LD A,L
|
||
16A3 2F CPL
|
||
16A4 6F LD L,A
|
||
16A5 C32B13 JP PUTVAL
|
||
;
|
||
; *******************
|
||
; * 2-OPS *
|
||
; *******************
|
||
;
|
||
; ----------
|
||
; LESS? [0]
|
||
; ----------
|
||
; IS ARG1 LESS THAN ARG2? [PRED]
|
||
16A8 CD151D LESSQ: CALL GETARG
|
||
16AB EB EX DE,HL
|
||
16AC CD1D1D CALL SHLGED
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 50
|
||
|
||
|
||
16AF D28013 JP NC,PREDS
|
||
16B2 C37113 JP PREDF
|
||
;
|
||
; ----------
|
||
; GRTR? [1]
|
||
; ----------
|
||
; IS ARG1 GREATER THAN ARG2? [PRED]
|
||
16B5 CD151D GRTRQ: CALL GETARG
|
||
16B8 CD1D1D CALL SHLGED
|
||
16BB D28013 JP NC,PREDS
|
||
16BE C37113 JP PREDF
|
||
;
|
||
; -----------
|
||
; DLESS? [2]
|
||
; -----------
|
||
; DECREMENT ARG1: SUCCEED IF ARG1 (-1) IS LESS THAN ARG2 [PRED]
|
||
16C1 CDAC15 DLESSQ: CALL DEC1
|
||
16C4 EB EX DE,HL
|
||
16C5 2ABD21 LD HL,(ARG2)
|
||
16C8 EB EX DE,HL
|
||
16C9 C3D316 JP IGRTQ1
|
||
;
|
||
; -----------
|
||
; IGRTR? [3]
|
||
; -----------
|
||
; INCREMENT ARG1: SUCCEED IF ARG1 (+1) IS GREATER THAN ARG2 [PRED]
|
||
16CC CD9F15 IGRTRQ: CALL INC1
|
||
16CF EB EX DE,HL
|
||
16D0 2ABD21 LD HL,(ARG2)
|
||
16D3 CD1D1D IGRTQ1: CALL SHLGED
|
||
16D6 D28013 JP NC,PREDS
|
||
16D9 C37113 JP PREDF
|
||
;
|
||
; ----------
|
||
; IN? [4]
|
||
; ----------
|
||
; IS OBJECT [ARG1] CONTAINED IN OBJECT [ARG2] [PRED]
|
||
16DC 3ABB21 INQ: LD A,(ARG1)
|
||
16DF CDF41C CALL OBJLOC
|
||
16E2 110400 LD DE,4
|
||
16E5 19 ADD HL,DE
|
||
16E6 3ABD21 LD A,(ARG2)
|
||
16E9 BE CP (HL)
|
||
16EA CA8013 JP Z,PREDS ;SUCCESS IF OBJ 2 IN 1
|
||
16ED C37113 JP PREDF
|
||
;
|
||
; ---------
|
||
; BTST [5]
|
||
; ---------
|
||
; IS EVERY "ON" BIT IN ARG1 ALSO "ON" IN ARG2 [PRED]
|
||
16F0 CD151D BTST: CALL GETARG
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 51
|
||
|
||
|
||
16F3 7C LD A,H
|
||
16F4 A2 AND D
|
||
16F5 57 LD D,A
|
||
16F6 7D LD A,L
|
||
16F7 A3 AND E
|
||
16F8 5F LD E,A
|
||
16F9 CD251D CALL HLGEDE
|
||
16FC CA8013 JP Z,PREDS
|
||
16FF C37113 JP PREDF
|
||
;
|
||
; --------
|
||
; BOR [6]
|
||
; --------
|
||
; RETURN BITWISE OR OF ARG1 AND ARG2 [VALUE]
|
||
1702 CD151D BOR: CALL GETARG
|
||
1705 7A LD A,D
|
||
1706 B4 OR H
|
||
1707 67 LD H,A
|
||
1708 7B LD A,E
|
||
1709 B5 OR L
|
||
170A 6F LD L,A
|
||
170B C32B13 JP PUTVAL
|
||
;
|
||
; ---------
|
||
; BAND [7]
|
||
; ---------
|
||
; RETURN BITWISE AND OF ARG1 AND ARG2 [VALUE]
|
||
170E CD151D BAND: CALL GETARG
|
||
1711 7C LD A,H
|
||
1712 A2 AND D
|
||
1713 67 LD H,A
|
||
1714 7D LD A,L
|
||
1715 A3 AND E
|
||
1716 6F LD L,A
|
||
1717 C32B13 JP PUTVAL
|
||
;
|
||
; ----------
|
||
; FSET? [8]
|
||
; ----------
|
||
; IS FLAG "ARG2" SET IN OBJECT "ARG1"? [PRED]
|
||
171A CDA01C FSETQ: CALL FLAGSU ;GET BIT
|
||
171D 7A LD A,D
|
||
171E A0 AND B
|
||
171F 57 LD D,A
|
||
1720 7B LD A,E
|
||
1721 A1 AND C
|
||
1722 B2 OR D ;CHECK FOR ON
|
||
1723 C28013 JP NZ,PREDS ;BIT ON
|
||
1726 C37113 JP PREDF ;BIT OFF
|
||
;
|
||
; ---------
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 52
|
||
|
||
|
||
; FSET [9]
|
||
; ---------
|
||
; SET FLAG "ARG2" IN OBJECT "ARG1"
|
||
1729 CDA01C FSET: CALL FLAGSU
|
||
172C 7A LD A,D
|
||
172D B0 OR B
|
||
172E 77 LD (HL),A
|
||
172F 23 INC HL
|
||
1730 7B LD A,E
|
||
1731 B1 OR C
|
||
1732 77 LD (HL),A
|
||
1733 C31012 JP MLOOP
|
||
;
|
||
; ------------
|
||
; FCLEAR [10]
|
||
; ------------
|
||
; CLEAR FLAG "ARG2" IN OBJECT "ARG1"
|
||
1736 CDA01C FCLEAR: CALL FLAGSU
|
||
1739 78 LD A,B
|
||
173A 2F CPL
|
||
173B A2 AND D
|
||
173C 77 LD (HL),A
|
||
173D 23 INC HL
|
||
173E 79 LD A,C
|
||
173F 2F CPL
|
||
1740 A3 AND E
|
||
1741 77 LD (HL),A
|
||
1742 C31012 JP MLOOP
|
||
;
|
||
; ---------
|
||
; SET [11]
|
||
; ---------
|
||
; SET VARIABLE "ARG1" EQUAL TO VALUE "ARG2"
|
||
1745 3ABB21 ZSET: LD A,(ARG1)
|
||
1748 2ABD21 LD HL,(ARG2)
|
||
174B CD6513 VARPTR: CALL VARPUT
|
||
174E C31012 JP MLOOP
|
||
;
|
||
; ----------
|
||
; MOVE [12]
|
||
; ----------
|
||
; PUT OBJECT "ARG1" INTO OBJECT "ARG2"
|
||
1751 CDC815 MOVE: CALL REMOVC ;REMOVE OBJECT FIRST
|
||
1754 3ABB21 LD A,(ARG1)
|
||
1757 CDF41C CALL OBJLOC
|
||
175A E5 PUSH HL ;SAVE LOC OF FIRST ARG
|
||
175B 110400 LD DE,4
|
||
175E 19 ADD HL,DE ;LOC SLOT
|
||
175F 3ABD21 LD A,(ARG2)
|
||
1762 77 LD (HL),A
|
||
1763 CDF41C CALL OBJLOC
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 53
|
||
|
||
|
||
1766 110600 LD DE,6
|
||
1769 19 ADD HL,DE ;FIRST SLOT
|
||
176A 46 LD B,(HL)
|
||
176B 3ABB21 LD A,(ARG1)
|
||
176E 77 LD (HL),A
|
||
176F E1 POP HL
|
||
1770 78 LD A,B
|
||
1771 B7 OR A
|
||
1772 CA1012 JP Z,MLOOP
|
||
1775 110500 LD DE,5
|
||
1778 19 ADD HL,DE
|
||
1779 77 LD (HL),A ;NEXT SLOT
|
||
177A C31012 JP MLOOP
|
||
;
|
||
; ---------
|
||
; GET [13]
|
||
; ---------
|
||
; RETURN VALUE OF ITEM "ARG2" IN WORD-TABLE AT "ARG1"
|
||
177D 2ABD21 GET: LD HL,(ARG2)
|
||
1780 29 ADD HL,HL ;ITEM NUMBER*2
|
||
1781 EB EX DE,HL
|
||
1782 2ABB21 LD HL,(ARG1)
|
||
1785 19 ADD HL,DE ;POINTER TO ITEM
|
||
1786 CDE41D CALL SETWRD
|
||
1789 CD251E CALL GETWRD ;GET VALUE
|
||
178C C32B13 JP PUTVAL
|
||
;
|
||
; ----------
|
||
; GETB [14]
|
||
; ----------
|
||
; RETURN VALUE OF ITEM "ARG2" IN BYTE-TABLE AT "ARG1" [VALUE]
|
||
178F 2ABD21 GETB: LD HL,(ARG2)
|
||
1792 EB EX DE,HL
|
||
1793 2ABB21 LD HL,(ARG1)
|
||
1796 19 ADD HL,DE
|
||
1797 CDE41D CALL SETWRD
|
||
179A CD301E CALL GETBYT
|
||
179D 6F LD L,A
|
||
179E 2600 LD H,0
|
||
17A0 C32B13 JP PUTVAL
|
||
;
|
||
; ----------
|
||
; GETP [15]
|
||
; ----------
|
||
; RETURN PROP "ARG2" OF OBJECT "ARG1"; IF SPECIFIED PROP DOES
|
||
; NOT EXIST, RETUURN PROP'TH ELEMENT OF DEFAULT OBJECT [VALUE]
|
||
17A3 CDCA1C GETP: CALL PROPB ;GET POINTER TO PROPS IN PROP TABLE
|
||
17A6 CDE11C GETP1: CALL PROPN
|
||
17A9 47 LD B,A
|
||
17AA 3ABD21 LD A,(ARG2)
|
||
17AD B8 CP B
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 54
|
||
|
||
|
||
17AE CAD717 JP Z,GETP2 ;FOUND PROP
|
||
17B1 D2BA17 JP NC,GETP3 ;GET PROP FROM DEFAULT TABLE
|
||
17B4 CDEC1C CALL PROPNX ;TRY AGAIN WITH NEXT PROP
|
||
17B7 C3A617 JP GETP1
|
||
|
||
17BA 2AD921 GETP3: LD HL,(ZCODEP)
|
||
17BD 110A00 LD DE,ZOBJEC
|
||
17C0 19 ADD HL,DE
|
||
17C1 56 LD D,(HL)
|
||
17C2 23 INC HL
|
||
17C3 5E LD E,(HL)
|
||
17C4 2AD921 LD HL,(ZCODEP)
|
||
17C7 19 ADD HL,DE ;BEG OF OBJECT TABLE
|
||
17C8 3ABD21 LD A,(ARG2)
|
||
17CB 87 ADD A,A
|
||
17CC CD081F CALL HLOFF
|
||
17CF 2B DEC HL
|
||
17D0 5E LD E,(HL)
|
||
17D1 2B DEC HL
|
||
17D2 56 LD D,(HL)
|
||
17D3 EB EX DE,HL
|
||
17D4 C32B13 JP PUTVAL ;RETURN DEFAULT VALUE
|
||
|
||
17D7 CDE51C GETP2: CALL PROPL ;GET LENGTH
|
||
17DA 23 INC HL
|
||
17DB 3D DEC A
|
||
17DC FAE917 JP M,GETP2A ;1 BYTE
|
||
17DF C40602 CALL NZ,ZER ;BAD PROP LENGTH
|
||
17E2 56 LD D,(HL)
|
||
17E3 23 INC HL
|
||
17E4 5E LD E,(HL)
|
||
17E5 EB EX DE,HL
|
||
17E6 C32B13 JP PUTVAL ;RETURN TWO BYTE PROP
|
||
|
||
17E9 6E GETP2A: LD L,(HL)
|
||
17EA 2600 LD H,0
|
||
17EC C32B13 JP PUTVAL
|
||
|
||
17EF CDCA1C GETPT: CALL PROPB
|
||
17F2 CDE11C GETPT1: CALL PROPN
|
||
17F5 47 LD B,A
|
||
17F6 3ABD21 LD A,(ARG2)
|
||
17F9 B8 CP B
|
||
17FA CA0618 JP Z,GETPT2 ;FOUND PROP
|
||
17FD D22713 JP NC,RET0
|
||
1800 CDEC1C CALL PROPNX
|
||
1803 C3F217 JP GETPT1
|
||
|
||
1806 23 GETPT2: INC HL
|
||
1807 EB EX DE,HL
|
||
1808 2AD921 LD HL,(ZCODEP) ;SUBRACT OFF RELATIVE POINTER
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 55
|
||
|
||
|
||
180B 7B LD A,E
|
||
180C 95 SUB L
|
||
180D 6F LD L,A
|
||
180E 7A LD A,D
|
||
180F 9C SBC A,H
|
||
1810 67 LD H,A
|
||
1811 C32B13 JP PUTVAL
|
||
|
||
1814 CDCA1C NEXTP: CALL PROPB ;POINT TO PROP VALUE
|
||
1817 3ABD21 LD A,(ARG2)
|
||
181A B7 OR A
|
||
181B CA3218 JP Z,NEXTP2 ;PROP0
|
||
181E CDE11C NEXTP1: CALL PROPN
|
||
1821 47 LD B,A
|
||
1822 3ABD21 LD A,(ARG2)
|
||
1825 B8 CP B
|
||
1826 CA3818 JP Z,NEXTP3 ;FOUND PROP
|
||
1829 D22713 JP NC,RET0 ;RETURN 0
|
||
182C CDEC1C CALL PROPNX
|
||
182F C31E18 JP NEXTP1 ;LOOP
|
||
|
||
1832 CDE11C NEXTP2: CALL PROPN
|
||
1835 C32813 JP PUTBYT
|
||
|
||
1838 CDEC1C NEXTP3: CALL PROPNX
|
||
183B C33218 JP NEXTP2 ;PROPN OF NEXT
|
||
|
||
183E CD151D ZADD: CALL GETARG
|
||
1841 19 ADD HL,DE
|
||
1842 C32B13 JP PUTVAL
|
||
|
||
1845 CD151D ZSUB: CALL GETARG
|
||
1848 7B LD A,E
|
||
1849 95 SUB L
|
||
184A 6F LD L,A
|
||
184B 7A LD A,D
|
||
184C 9C SBC A,H
|
||
184D 67 LD H,A
|
||
184E C32B13 JP PUTVAL
|
||
|
||
1851 CD151D MUL: CALL GETARG
|
||
1854 EB EX DE,HL
|
||
1855 CD781C CALL SIGNC ;CHECK SIGN
|
||
1858 E5 PUSH HL
|
||
1859 210200 LD HL,2
|
||
185C CD251D CALL HLGEDE
|
||
185F CA7818 JP Z,MUL2
|
||
1862 210400 LD HL,4
|
||
1865 CD251D CALL HLGEDE
|
||
1868 CA7518 JP Z,MUL4
|
||
186B E1 POP HL
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 56
|
||
|
||
|
||
186C CD1C1C CALL MULT ;DO THE MULTIPLY
|
||
186F CD851C MUL1: CALL SIGNS ;SET THE SIGN
|
||
1872 C32B13 JP PUTVAL ;THEN STORE RESULT
|
||
|
||
1875 E1 MUL4: POP HL
|
||
1876 29 ADD HL,HL
|
||
1877 E5 PUSH HL
|
||
1878 E1 MUL2: POP HL
|
||
1879 29 ADD HL,HL
|
||
187A C36F18 JP MUL1
|
||
|
||
187D CD151D DIV: CALL GETARG
|
||
1880 EB EX DE,HL
|
||
1881 CD781C CALL SIGNC ;CHECK SIGNS
|
||
1884 E5 PUSH HL
|
||
1885 210200 LD HL,2
|
||
1888 CD251D CALL HLGEDE
|
||
188B CA9E18 JP Z,DIV2 ;DIVIDE BY 2
|
||
188E 210400 LD HL,4
|
||
1891 CD251D CALL HLGEDE
|
||
1894 CAA518 JP Z,DIV4 ;DIVIDE BY 4
|
||
1897 E1 POP HL
|
||
1898 CD451C CALL DIVIDE ;DO THE DIVIDE
|
||
189B C36F18 JP MUL1 ;SET SIGN AND RETURN
|
||
|
||
189E E1 DIV2: POP HL
|
||
189F CDAC18 DIV2B: CALL DIV2A
|
||
18A2 C36F18 JP MUL1
|
||
|
||
18A5 E1 DIV4: POP HL
|
||
18A6 CDAC18 CALL DIV2A
|
||
18A9 C39F18 JP DIV2B
|
||
|
||
18AC B7 DIV2A: OR A ;CLEAR CARRY
|
||
18AD 7C LD A,H
|
||
18AE 1F RRA
|
||
18AF 67 LD H,A
|
||
18B0 7D LD A,L
|
||
18B1 1F RRA
|
||
18B2 6F LD L,A
|
||
18B3 C9 RET
|
||
|
||
18B4 CD151D ZMOD: CALL GETARG
|
||
18B7 EB EX DE,HL
|
||
18B8 CD781C CALL SIGNC ;MAKE THEM POSITIVE
|
||
18BB CD451C CALL DIVIDE ;DO THE DIVIDE
|
||
18BE EB EX DE,HL ;GET THE REMAINDER
|
||
18BF C32B13 JP PUTVAL
|
||
;
|
||
; *******************
|
||
; * X-OPS *
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 57
|
||
|
||
|
||
; *******************
|
||
;
|
||
18C2 2ABB21 EQUALQ: LD HL,(ARG1)
|
||
18C5 EB EX DE,HL
|
||
18C6 3AC321 LD A,(ARGCNT)
|
||
18C9 47 LD B,A
|
||
18CA 05 DEC B
|
||
18CB CC0602 CALL Z,ZER
|
||
18CE 2ABD21 LD HL,(ARG2)
|
||
18D1 CDE318 CALL EQUAQ1
|
||
18D4 2ABF21 LD HL,(ARG3)
|
||
18D7 CDE318 CALL EQUAQ1
|
||
18DA 2AC121 LD HL,(ARG4)
|
||
18DD CDE318 CALL EQUAQ1
|
||
18E0 CD0602 CALL ZER
|
||
|
||
18E3 CD251D EQUAQ1: CALL HLGEDE ;DO COMPARISON
|
||
18E6 E1 POP HL ;RESTORE RETURN ADDRESS
|
||
18E7 CA8013 JP Z,PREDS ;DON'T BOTHER RETURNING
|
||
18EA 05 DEC B ;ARG COUNT
|
||
18EB CA7113 JP Z,PREDF ;OUT OF ARGS, FAIL
|
||
18EE E9 JP (HL) ;ELSE RETURN
|
||
|
||
18EF 2ABB21 ZCALL: LD HL,(ARG1)
|
||
18F2 7C LD A,H
|
||
18F3 B5 OR L
|
||
18F4 CA2B13 JP Z,PUTVAL
|
||
18F7 2AAB21 LD HL,(OZSTKC)
|
||
18FA CD2C1D CALL PSHSTK
|
||
18FD 2AA921 LD HL,(OZSTKP)
|
||
1900 CD2C1D CALL PSHSTK
|
||
1903 2AA621 LD HL,(ZPCL)
|
||
1906 CD2C1D CALL PSHSTK ;SAVE OLD PC LOWER
|
||
1909 2AA521 LD HL,(ZPCH) ;SAVE HIGH IN L
|
||
190C E5 PUSH HL
|
||
190D AF XOR A
|
||
190E 32CE21 LD (ZPCFLG),A ;PC HAS CHANGED
|
||
1911 67 LD H,A
|
||
1912 3ABB21 LD A,(ARG1)
|
||
1915 6F LD L,A
|
||
1916 29 ADD HL,HL ;NEW ZPCL
|
||
1917 22A621 LD (ZPCL),HL
|
||
191A 3ABC21 LD A,(ARG1+1)
|
||
191D 32A521 LD (ZPCH),A ;NEW ZPCH
|
||
1920 CD5A1D CALL NEXTPC ;GET NUMBER OF LOCALS
|
||
1923 E1 POP HL
|
||
1924 47 LD B,A ;B HAS NUMBER OF LOCALS
|
||
1925 67 LD H,A
|
||
1926 E5 PUSH HL ;SAVE VALUE
|
||
1927 218721 LD HL,LOCALS ;STORE OLD LOCALS
|
||
192A B7 OR A
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 58
|
||
|
||
|
||
192B CA4C19 JP Z,ZCALL2 ;NO LOCALS
|
||
192E C5 ZCALL1: PUSH BC
|
||
192F 56 LD D,(HL)
|
||
1930 23 INC HL
|
||
1931 5E LD E,(HL)
|
||
1932 EB EX DE,HL
|
||
1933 CD2C1D CALL PSHSTK
|
||
1936 1B DEC DE
|
||
1937 D5 PUSH DE
|
||
1938 CD5A1D CALL NEXTPC ;GET NEW DEFAULT VALUE FOR LOCAL
|
||
193B 57 LD D,A
|
||
193C D5 PUSH DE
|
||
193D CD5A1D CALL NEXTPC ;WORD VALUE
|
||
1940 D1 POP DE
|
||
1941 5F LD E,A
|
||
1942 E1 POP HL ;POINTER TO STORE NEW LOCAL
|
||
1943 72 LD (HL),D
|
||
1944 23 INC HL
|
||
1945 73 LD (HL),E
|
||
1946 23 INC HL
|
||
1947 C1 POP BC
|
||
1948 05 DEC B
|
||
1949 C22E19 JP NZ,ZCALL1 ;LOOP THROUGH ALL LOCALS
|
||
194C 3AC321 ZCALL2: LD A,(ARGCNT) ;PASS ARGS
|
||
194F 47 LD B,A
|
||
1950 05 DEC B
|
||
1951 CA6819 JP Z,ZCALL4 ;NO ARGS TO PASS
|
||
1954 21BD21 LD HL,ARG2 ;POINTER TO FIRST ARG
|
||
1957 118721 LD DE,LOCALS
|
||
195A 7E ZCALL3: LD A,(HL)
|
||
195B 23 INC HL
|
||
195C 13 INC DE
|
||
195D 12 LD (DE),A
|
||
195E 1B DEC DE
|
||
195F 7E LD A,(HL)
|
||
1960 23 INC HL
|
||
1961 12 LD (DE),A
|
||
1962 13 INC DE
|
||
1963 13 INC DE
|
||
1964 05 DEC B
|
||
1965 C25A19 JP NZ,ZCALL3
|
||
1968 E1 ZCALL4: POP HL ;GET BACK ZPCH AND NUMBER OF LOCALS
|
||
1969 CD2C1D CALL PSHSTK
|
||
196C 3AA821 LD A,(ZSTAKC)
|
||
196F 32AB21 LD (OZSTKC),A
|
||
1972 2A070E LD HL,(ZSTAKP)
|
||
1975 22A921 LD (OZSTKP),HL ;FOR KNOWING WHERE TO RETURN
|
||
1978 C31012 JP MLOOP
|
||
|
||
197B 2ABD21 PUT: LD HL,(ARG2)
|
||
197E 29 ADD HL,HL
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 59
|
||
|
||
|
||
197F EB EX DE,HL
|
||
1980 2ABB21 LD HL,(ARG1)
|
||
1983 19 ADD HL,DE ;Z ADDRESS
|
||
1984 EB EX DE,HL
|
||
1985 2AD921 LD HL,(ZCODEP)
|
||
1988 19 ADD HL,DE ;REAL POINTER
|
||
1989 EB EX DE,HL
|
||
198A 2ABF21 LD HL,(ARG3) ;VALUE TO STORE
|
||
198D EB EX DE,HL
|
||
198E 72 LD (HL),D
|
||
198F 23 INC HL
|
||
1990 73 LD (HL),E
|
||
1991 C31012 JP MLOOP
|
||
|
||
1994 2ABD21 PUTB: LD HL,(ARG2)
|
||
1997 EB EX DE,HL
|
||
1998 2ABB21 LD HL,(ARG1)
|
||
199B 19 ADD HL,DE
|
||
199C EB EX DE,HL
|
||
199D 2AD921 LD HL,(ZCODEP)
|
||
19A0 19 ADD HL,DE
|
||
19A1 3ABF21 LD A,(ARG3)
|
||
19A4 77 LD (HL),A ;STORE ONE BYTE IN RANDOM TABLE
|
||
19A5 C31012 JP MLOOP
|
||
|
||
19A8 CDCA1C PUTP: CALL PROPB ;SET PROP
|
||
19AB CDE11C PUTP1: CALL PROPN ;GET PROP NUMBER
|
||
19AE 47 LD B,A
|
||
19AF 3ABD21 LD A,(ARG2)
|
||
19B2 B8 CP B
|
||
19B3 CABF19 JP Z,PUTP2 ;FOUND PROPERTY
|
||
19B6 D40602 CALL NC,ZER ;BAD PROP NUMBER
|
||
19B9 CDEC1C CALL PROPNX ;TRY NEXT
|
||
19BC C3AB19 JP PUTP1
|
||
|
||
19BF CDE51C PUTP2: CALL PROPL ;GET LENGTH
|
||
19C2 23 INC HL
|
||
19C3 EB EX DE,HL
|
||
19C4 2ABF21 LD HL,(ARG3)
|
||
19C7 3D DEC A
|
||
19C8 FAD519 JP M,PUTP2A ;STORE 1 BYTE
|
||
19CB C40602 CALL NZ,ZER ;TOO LONG
|
||
19CE EB EX DE,HL
|
||
19CF 72 LD (HL),D
|
||
19D0 23 INC HL
|
||
19D1 73 LD (HL),E
|
||
19D2 C31012 JP MLOOP ;RETURN
|
||
|
||
19D5 EB PUTP2A: EX DE,HL
|
||
19D6 73 LD (HL),E
|
||
19D7 C31012 JP MLOOP ;SET AND RETURN
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 60
|
||
|
||
|
||
|
||
|
||
19DA ZREAD:
|
||
19DA CDC105 CALL WHOLIN
|
||
19DD CDEE1B CALL RND ;RANDOMIZE
|
||
19E0 2AD921 LD HL,(ZCODEP) ;MAIN READ CODE
|
||
19E3 EB EX DE,HL ;GET REAL POINTERS TO TABLES
|
||
19E4 2ABB21 LD HL,(ARG1)
|
||
19E7 19 ADD HL,DE ;BUFFER TABLE
|
||
19E8 22BB21 LD (ARG1),HL
|
||
19EB 2ABD21 LD HL,(ARG2)
|
||
19EE 19 ADD HL,DE ;RESULT TABLE
|
||
19EF 22BD21 LD (ARG2),HL
|
||
19F2 CD5403 CALL READBF ;READ THE BUFFER
|
||
19F5 47 LD B,A ;CHARACTER COUNT IN B
|
||
19F6 0E00 LD C,0 ;C HAS CHARACTERS IN WORD
|
||
19F8 2ABD21 LD HL,(ARG2)
|
||
19FB 23 INC HL
|
||
19FC 3600 LD (HL),0 ;SET WORDS READ TO 0
|
||
19FE 23 INC HL
|
||
19FF 22E921 LD (RTABP),HL ;INITIALIZE RESULT TABLE POINTER
|
||
1A02 2ABB21 LD HL,(ARG1)
|
||
1A05 23 INC HL ;HL HAS POINTER TO INPUT CHARACTERS
|
||
1A06 E5 READL: PUSH HL
|
||
1A07 2ABD21 LD HL,(ARG2)
|
||
1A0A 7E LD A,(HL)
|
||
1A0B 23 INC HL
|
||
1A0C BE CP (HL)
|
||
1A0D E1 POP HL
|
||
1A0E CA1012 JP Z,MLOOP ;TOO MANY WORDS
|
||
;ERROR HERE IF DESIRED INSTEAD OF JZ
|
||
1A11 78 LD A,B
|
||
1A12 B1 OR C
|
||
1A13 CA1012 JP Z,MLOOP ;OUT OF CHARACTERS AND WORDS
|
||
1A16 79 LD A,C
|
||
1A17 FE06 CP 6
|
||
1A19 CC9F1A CALL Z,FLUSHW ;FLUSH CHARS IN A WORD OVER 6 CHARACTERS
|
||
1A1C 79 LD A,C
|
||
1A1D B7 OR A
|
||
1A1E C2511A JP NZ,READL2 ;NOT FIRST CHARACTER IN WORD
|
||
1A21 E5 PUSH HL
|
||
1A22 1606 LD D,6
|
||
1A24 21B021 LD HL,ZSTBUI ;INITIALIZE WORD BUFFER
|
||
1A27 3600 RD0PL: LD (HL),0
|
||
1A29 23 INC HL
|
||
1A2A 15 DEC D
|
||
1A2B C2271A JP NZ,RD0PL
|
||
1A2E E1 POP HL
|
||
1A2F 3ABB21 LD A,(ARG1)
|
||
1A32 57 LD D,A
|
||
1A33 7D LD A,L
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 61
|
||
|
||
|
||
1A34 92 SUB D ;POSITION OF START OF WORD
|
||
1A35 E5 PUSH HL
|
||
1A36 2AE921 LD HL,(RTABP)
|
||
1A39 23 INC HL
|
||
1A3A 23 INC HL
|
||
1A3B 23 INC HL
|
||
1A3C 77 LD (HL),A ;STORE IN RESULT TABLE
|
||
1A3D E1 POP HL
|
||
1A3E 7E LD A,(HL)
|
||
1A3F CDC61A CALL SIBRKQ ;SELF INSERTING BREAK?
|
||
1A42 DA6E1A JP C,RSIBRK
|
||
1A45 7E LD A,(HL)
|
||
1A46 CDAD1A CALL RBRKQ ;NORMAL BREAK?
|
||
1A49 D2511A JP NC,READL2 ;NO
|
||
1A4C 23 INC HL ;YES, FLUSH STRANDED BREAKS
|
||
1A4D 05 DEC B
|
||
1A4E C3061A JP READL ;LOOP BACK
|
||
|
||
1A51 78 READL2: LD A,B
|
||
1A52 B7 OR A
|
||
1A53 CA741A JP Z,READL3 ;OUT OF CHARACTERS, SIMULATE WORD ENDING
|
||
1A56 7E LD A,(HL)
|
||
1A57 CDAD1A CALL RBRKQ ;WORD BREAK?
|
||
1A5A DA741A JP C,READL3 ;FOUND A BREAK
|
||
1A5D 56 LD D,(HL)
|
||
1A5E E5 PUSH HL
|
||
1A5F 21B021 LD HL,ZSTBUI
|
||
1A62 79 LD A,C
|
||
1A63 CD081F CALL HLOFF
|
||
1A66 72 LD (HL),D ;STORE CHARACTER IN BUFFER
|
||
1A67 E1 POP HL
|
||
1A68 05 DEC B ;ONE LESS CHARACTER
|
||
1A69 0C INC C ;ONE MORE CHARACTER IN WORD
|
||
1A6A 23 INC HL ;POINT TO NEXT CHARACTER
|
||
1A6B C3061A JP READL
|
||
|
||
1A6E 32B021 RSIBRK: LD (ZSTBUI),A ;STORE SELF INSERTING BREAK
|
||
1A71 0C INC C ;1 CHAR
|
||
1A72 05 DEC B ;1 LESS CHAR
|
||
1A73 23 INC HL
|
||
1A74 79 READL3: LD A,C ;INSERT WORD IF ANY CHARACTERS IN WORD
|
||
1A75 B7 OR A
|
||
1A76 CA061A JP Z,READL ;NO CHARACTERS IN WORD
|
||
1A79 E5 PUSH HL
|
||
1A7A C5 PUSH BC
|
||
1A7B 2AE921 LD HL,(RTABP) ;STORE PARAMS IN TABLE
|
||
1A7E 23 INC HL
|
||
1A7F 23 INC HL
|
||
1A80 71 LD (HL),C ;REAL LENGTH OF WORD
|
||
1A81 CD9020 CALL CONZST ;CONVERT TO ZSTRING
|
||
1A84 CDED1A CALL FINDW ;LOOK UP WORD IN VOCAB TABLE
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 62
|
||
|
||
|
||
1A87 2AE921 LD HL,(RTABP) ;STORE RESULT
|
||
1A8A 72 LD (HL),D
|
||
1A8B 23 INC HL
|
||
1A8C 73 LD (HL),E
|
||
1A8D 23 INC HL
|
||
1A8E 23 INC HL
|
||
1A8F 23 INC HL
|
||
1A90 22E921 LD (RTABP),HL ;POINTER TO NEXT WORD
|
||
1A93 2ABD21 LD HL,(ARG2)
|
||
1A96 23 INC HL
|
||
1A97 34 INC (HL) ;ONE MORE WORD
|
||
1A98 C1 POP BC
|
||
1A99 E1 POP HL
|
||
1A9A 0E00 LD C,0 ;ZERO CHARACTERS IN NEXT WORD
|
||
1A9C C3061A JP READL
|
||
|
||
1A9F 78 FLUSHW: LD A,B
|
||
1AA0 B7 OR A ;FLUSH CHARACTERS TILL BREAD OR END OF BUFFER
|
||
1AA1 C8 RET Z
|
||
1AA2 7E LD A,(HL)
|
||
1AA3 CDAD1A CALL RBRKQ
|
||
1AA6 D8 RET C ;FOUND A BREAK
|
||
1AA7 23 INC HL
|
||
1AA8 05 DEC B
|
||
1AA9 0C INC C
|
||
1AAA C39F1A JP FLUSHW
|
||
|
||
1AAD CDC61A RBRKQ: CALL SIBRKQ ;FIRST CHECK SELF INSERTING BREAKS
|
||
1AB0 D8 RET C ;YES
|
||
1AB1 E5 PUSH HL
|
||
1AB2 21E31A LD HL,BRKTBL
|
||
1AB5 160A LD D,NBRKS
|
||
1AB7 BE RBRK1: CP (HL)
|
||
1AB8 CAC31A JP Z,FBRK ;MATCH
|
||
1ABB 23 INC HL
|
||
1ABC 15 DEC D
|
||
1ABD C2B71A JP NZ,RBRK1
|
||
1AC0 E1 RBRK2: POP HL ;NOT FOUND
|
||
1AC1 B7 OR A ;CLEAR CARRY
|
||
1AC2 C9 RET
|
||
|
||
1AC3 E1 FBRK: POP HL
|
||
1AC4 37 SCF
|
||
1AC5 C9 RET ;FOUND A BREAK, SET CARRY AND RETURN
|
||
|
||
1AC6 E5 SIBRKQ: PUSH HL
|
||
1AC7 CDD41A CALL GETVOC
|
||
1ACA 56 LD D,(HL) ;NUMBER OF SELF INSERTING BREAKS
|
||
1ACB 15 DEC D
|
||
1ACC 14 INC D
|
||
1ACD CAC01A JP Z,RBRK2 ;FAIL
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 63
|
||
|
||
|
||
1AD0 23 INC HL
|
||
1AD1 C3B71A JP RBRK1
|
||
|
||
1AD4 2AD921 GETVOC: LD HL,(ZCODEP)
|
||
1AD7 110800 LD DE,ZVOCAB
|
||
1ADA 19 ADD HL,DE
|
||
1ADB 56 LD D,(HL)
|
||
1ADC 23 INC HL
|
||
1ADD 5E LD E,(HL)
|
||
1ADE 2AD921 LD HL,(ZCODEP)
|
||
1AE1 19 ADD HL,DE
|
||
1AE2 C9 RET
|
||
|
||
1AE3 202E2C3F BRKTBL: DB ' .,?'
|
||
1AE7 0D0A090C DB 0DH,0AH,9H,0CH
|
||
1AEB 2222 DB 22H,22H
|
||
|
||
000A NBRKS EQU $-BRKTBL
|
||
|
||
1AED CDD41A FINDW: CALL GETVOC ;FIND WORD IN VOCAB TABLE, ASSUMES VOCAB IN MEMORY
|
||
1AF0 7E LD A,(HL)
|
||
1AF1 23 INC HL
|
||
1AF2 CD081F CALL HLOFF ;SKIP OVER SELF INSERTING BREAKS
|
||
1AF5 7E LD A,(HL)
|
||
1AF6 87 ADD A,A
|
||
1AF7 87 ADD A,A
|
||
1AF8 87 ADD A,A
|
||
1AF9 87 ADD A,A
|
||
1AFA 4F LD C,A ;C HAS 16 TIMES VOCAB ENTRY SIZE
|
||
1AFB 23 INC HL
|
||
1AFC 56 LD D,(HL)
|
||
1AFD 23 INC HL
|
||
1AFE 5E LD E,(HL)
|
||
1AFF 23 INC HL ;HL POINTS TO VOCAB TABLE
|
||
1B00 3AE421 LD A,(ZSTBUO+1) ;GET FIRST CHARACTER
|
||
1B03 47 LD B,A ;PUT IT IN B
|
||
1B04 C3101B JP FWL2 ;WE CAN'T START AT THE BEGINNING
|
||
|
||
1B07 B2 FWL1A: OR D ;HERE ON 16 WORD BOUNDRY
|
||
1B08 CA251B JP Z,FWL3 ;END OF TABLE
|
||
1B0B 7E FWL1: LD A,(HL)
|
||
1B0C B8 CP B ;CHECK ONLY FIRST BYTE
|
||
1B0D D2251B JP NC,FWL3 ;FOUND PROPER AREA FOR FINE SEARCH
|
||
1B10 7D FWL2: LD A,L
|
||
1B11 81 ADD A,C
|
||
1B12 6F LD L,A
|
||
1B13 7C LD A,H
|
||
1B14 CE00 ADC A,0
|
||
1B16 67 LD H,A ;POINTER TO NEXT BLOCK (HLOFF NOT USED FOR SPEED)
|
||
1B17 7B LD A,E
|
||
1B18 D610 SUB 16 ;16 MORE WORDS
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 64
|
||
|
||
|
||
1B1A 5F LD E,A
|
||
1B1B CA071B JP Z,FWL1A
|
||
1B1E D20B1B JP NC,FWL1
|
||
1B21 15 DEC D
|
||
1B22 F20B1B JP P,FWL1 ;NOT OUT OF WORDS
|
||
1B25 7D FWL3: LD A,L ;NOW DO FINE CHECK
|
||
1B26 91 SUB C ;BACKUP 16 WORDS
|
||
1B27 6F LD L,A
|
||
1B28 7C LD A,H
|
||
1B29 DE00 SBC A,0
|
||
1B2B 67 LD H,A
|
||
1B2C 7B LD A,E
|
||
1B2D C610 ADD A,16
|
||
1B2F 5F LD E,A
|
||
1B30 7A LD A,D
|
||
1B31 CE00 ADC A,0
|
||
1B33 57 LD D,A ;BACKUP COUNT
|
||
1B34 79 LD A,C
|
||
1B35 0F RRCA
|
||
1B36 0F RRCA
|
||
1B37 0F RRCA
|
||
1B38 0F RRCA
|
||
1B39 4F LD C,A ;REAL ENTRY SIZE
|
||
1B3A FWL4:
|
||
1B3A 3AE421 LD A,(ZSTBUO+1)
|
||
1B3D BE CP (HL)
|
||
1B3E DA721B JP C,FWFAIL
|
||
1B41 C2681B JP NZ,FWL4A ;CHECK ALL 4 BYTES
|
||
1B44 23 INC HL
|
||
1B45 3AE321 LD A,(ZSTBUO)
|
||
1B48 BE CP (HL)
|
||
1B49 DA721B JP C,FWFAIL
|
||
1B4C C2671B JP NZ,FWL4B
|
||
1B4F 23 INC HL
|
||
1B50 3AE621 LD A,(ZSTBUO+3)
|
||
1B53 BE CP (HL)
|
||
1B54 DA721B JP C,FWFAIL
|
||
1B57 C2661B JP NZ,FWL4C
|
||
1B5A 23 INC HL
|
||
1B5B 3AE521 LD A,(ZSTBUO+2)
|
||
1B5E BE CP (HL)
|
||
1B5F DA721B JP C,FWFAIL
|
||
1B62 CA761B JP Z,FWSUCC ;MATCH
|
||
1B65 2B DEC HL
|
||
1B66 2B FWL4C: DEC HL
|
||
1B67 2B FWL4B: DEC HL
|
||
1B68 79 FWL4A: LD A,C
|
||
1B69 CD081F CALL HLOFF
|
||
1B6C 1B DEC DE
|
||
1B6D 7A LD A,D
|
||
1B6E B3 OR E
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 65
|
||
|
||
|
||
1B6F C23A1B JP NZ,FWL4 ;NOT OUT OF WORDS YET
|
||
1B72 110000 FWFAIL: LD DE,0
|
||
1B75 C9 RET
|
||
|
||
1B76 2B FWSUCC: DEC HL
|
||
1B77 2B DEC HL
|
||
1B78 2B DEC HL
|
||
1B79 EB EX DE,HL
|
||
1B7A 2AD921 LD HL,(ZCODEP)
|
||
1B7D 7B LD A,E
|
||
1B7E 95 SUB L
|
||
1B7F 5F LD E,A
|
||
1B80 7A LD A,D
|
||
1B81 9C SBC A,H
|
||
1B82 57 LD D,A
|
||
1B83 C9 RET
|
||
|
||
1B84 3ABB21 PRINTC: LD A,(ARG1)
|
||
1B87 4F LD C,A
|
||
1B88 CDB604 CALL COUT
|
||
1B8B C31012 JP MLOOP
|
||
|
||
1B8E 2ABB21 PRINTN: LD HL,(ARG1)
|
||
1B91 CD971B CALL PRNTNC
|
||
1B94 C31012 JP MLOOP
|
||
|
||
1B97 7C PRNTNC: LD A,H
|
||
1B98 B7 OR A
|
||
1B99 FCC51B CALL M,PRNTNG ;NEGATIVE NUMBER
|
||
1B9C 0600 LD B,0 ;DIGIT COUNT
|
||
1B9E 7C PRNTN1: LD A,H
|
||
1B9F B5 OR L
|
||
1BA0 CAAE1B JP Z,PRNTN3
|
||
1BA3 110A00 LD DE,10
|
||
1BA6 CD451C CALL DIVIDE
|
||
1BA9 D5 PUSH DE
|
||
1BAA 04 INC B
|
||
1BAB C39E1B JP PRNTN1
|
||
|
||
1BAE AF PRNTN3: XOR A
|
||
1BAF 80 ADD A,B
|
||
1BB0 CAC01B JP Z,PRNTN6 ;PRINT AT LEAST 0
|
||
1BB3 D1 PRNTN4: POP DE
|
||
1BB4 3E30 LD A,'0'
|
||
1BB6 83 ADD A,E
|
||
1BB7 4F LD C,A
|
||
1BB8 CDB604 CALL COUT
|
||
1BBB 05 DEC B
|
||
1BBC C2B31B JP NZ,PRNTN4
|
||
1BBF C9 RET
|
||
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 66
|
||
|
||
|
||
1BC0 0E30 PRNTN6: LD C,'0'
|
||
1BC2 C3B604 JP COUT
|
||
|
||
1BC5 0E2D PRNTNG: LD C,'-' ;PRINT -
|
||
1BC7 CDB604 CALL COUT
|
||
1BCA C38B1C JP SIGNCN ;CHANGE SIGN
|
||
|
||
1BCD 2ABB21 RANDOM: LD HL,(ARG1) ;RANDOM GENERATOR
|
||
1BD0 EB EX DE,HL
|
||
1BD1 CDEE1B CALL RND ;GET THE BASE NUMBER
|
||
1BD4 CD451C CALL DIVIDE
|
||
1BD7 EB EX DE,HL ;GET REMAINDER
|
||
1BD8 23 INC HL ;MAKE NOT EQUAL TO 0
|
||
1BD9 C32B13 JP PUTVAL
|
||
|
||
1BDC 2ABB21 ZPUSH: LD HL,(ARG1)
|
||
1BDF CD2C1D CALL PSHSTK
|
||
1BE2 C31012 JP MLOOP
|
||
|
||
1BE5 CD451D ZPOP: CALL POPSTK
|
||
1BE8 3ABB21 LD A,(ARG1)
|
||
1BEB C34B17 JP VARPTR
|
||
;
|
||
; **********************************************************************
|
||
; * *
|
||
; * ZORK - RANDOM ROUTINES *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
1BEE C5 RND: PUSH BC
|
||
1BEF 0E02 LD C,2 ;2 TIMES THROUGH LOOP
|
||
1BF1 0608 RND2: LD B,8
|
||
1BF3 21AC21 LD HL,SHIFT
|
||
1BF6 7E LD A,(HL)
|
||
1BF7 07 RND1: RLCA
|
||
1BF8 07 RLCA
|
||
1BF9 07 RLCA
|
||
1BFA AE XOR (HL)
|
||
1BFB 17 RLA
|
||
1BFC 17 RLA
|
||
1BFD 21AC21 LD HL,SHIFT
|
||
1C00 7E LD A,(HL)
|
||
1C01 17 RLA
|
||
1C02 77 LD (HL),A
|
||
1C03 23 INC HL
|
||
1C04 7E LD A,(HL)
|
||
1C05 17 RLA
|
||
1C06 77 LD (HL),A
|
||
1C07 23 INC HL
|
||
1C08 7E LD A,(HL)
|
||
1C09 17 RLA
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 67
|
||
|
||
|
||
1C0A 77 LD (HL),A
|
||
1C0B 23 INC HL
|
||
1C0C 7E LD A,(HL)
|
||
1C0D 17 RLA
|
||
1C0E 77 LD (HL),A
|
||
1C0F 05 DEC B
|
||
1C10 C2F71B JP NZ,RND1
|
||
1C13 0D DEC C
|
||
1C14 C2F11B JP NZ,RND2
|
||
1C17 C1 POP BC
|
||
1C18 2AAE21 LD HL,(SHIFT+2) ;GET THE NUMBER
|
||
1C1B C9 RET
|
||
|
||
1C1C C5 MULT: PUSH BC ;DEHL <=DE*HL
|
||
1C1D 010000 LD BC,0
|
||
1C20 3E10 LD A,16 ;LOOP COUNTER
|
||
1C22 F5 MULT1: PUSH AF
|
||
1C23 7B LD A,E
|
||
1C24 E601 AND 1 ;CHECK BIT FOR ADD
|
||
1C26 CA2E1C JP Z,MULT2 ;SKIP ADD PART IF 0
|
||
1C29 E5 PUSH HL ;SAVE MULTIPLIER
|
||
1C2A 09 ADD HL,BC ;ADD PART
|
||
1C2B 44 LD B,H
|
||
1C2C 4D LD C,L
|
||
1C2D E1 POP HL ;RESTORE H
|
||
1C2E 78 MULT2: LD A,B ;32 BIT SHIFT REMEMBERING CARRY
|
||
1C2F 1F RRA
|
||
1C30 47 LD B,A
|
||
1C31 79 LD A,C
|
||
1C32 1F RRA
|
||
1C33 4F LD C,A
|
||
1C34 7A LD A,D
|
||
1C35 1F RRA
|
||
1C36 57 LD D,A
|
||
1C37 7B LD A,E
|
||
1C38 1F RRA
|
||
1C39 5F LD E,A
|
||
1C3A F1 POP AF ;GET BACK LOOP COUNT
|
||
1C3B 3D DEC A
|
||
1C3C C2221C JP NZ,MULT1
|
||
1C3F 62 LD H,D ;PUT LOW ORDER ANSWER IN HL
|
||
1C40 6B LD L,E
|
||
1C41 50 LD D,B ;HIGH PART IN DE
|
||
1C42 59 LD E,C
|
||
1C43 C1 POP BC
|
||
1C44 C9 RET
|
||
|
||
1C45 C5 DIVIDE: PUSH BC ;HL<=HL/DE, REMAINDER IN DE
|
||
1C46 44 LD B,H
|
||
1C47 4D LD C,L
|
||
1C48 7A LD A,D ;NEGATE DIVISOR
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 68
|
||
|
||
|
||
1C49 2F CPL
|
||
1C4A 57 LD D,A
|
||
1C4B 7B LD A,E
|
||
1C4C 2F CPL
|
||
1C4D 5F LD E,A
|
||
1C4E 13 INC DE ;FOR TWO'S COMPLEMENT
|
||
1C4F 210000 LD HL,0 ;INITIAL VALUE FOR REMAINDER
|
||
1C52 3E11 LD A,17 ;INIT LOOP COUNTER
|
||
1C54 E5 DDIV0: PUSH HL ;SAVE REMAINDER
|
||
1C55 19 ADD HL,DE ;SUB DIVIS
|
||
1C56 D25A1C JP NC,DDIV1 ;UNDERFLOW, RESTORE HL
|
||
1C59 E3 EX (SP),HL
|
||
1C5A E1 DDIV1: POP HL
|
||
1C5B F5 PUSH AF ;SAVE LOOP COUNTER
|
||
1C5C 79 LD A,C ;4 REG SHIFT LEFT
|
||
1C5D 17 RLA ;WITH CARRY
|
||
1C5E 4F LD C,A ;CY->C->B->L->H
|
||
1C5F 78 LD A,B
|
||
1C60 17 RLA
|
||
1C61 47 LD B,A
|
||
1C62 7D LD A,L
|
||
1C63 17 RLA
|
||
1C64 6F LD L,A
|
||
1C65 7C LD A,H
|
||
1C66 17 RLA
|
||
1C67 67 LD H,A
|
||
1C68 F1 POP AF ;RESTORE LOOP COUNTER
|
||
1C69 3D DEC A ;DECREMENT IT
|
||
1C6A C2541C JP NZ,DDIV0 ;KEEP LOOPING
|
||
|
||
;CLEANUP, SHIFT REMAINDER RIGHT AND RETURN IN DE
|
||
1C6D B7 OR A
|
||
1C6E 7C LD A,H
|
||
1C6F 1F RRA
|
||
1C70 57 LD D,A
|
||
1C71 7D LD A,L
|
||
1C72 1F RRA
|
||
1C73 5F LD E,A
|
||
1C74 60 LD H,B
|
||
1C75 69 LD L,C
|
||
1C76 C1 POP BC
|
||
1C77 C9 RET
|
||
|
||
1C78 AF SIGNC: XOR A
|
||
1C79 32BA21 LD (SIGNF),A ;SET SIGNF
|
||
1C7C CD931C CALL SIGNPC ;POS CHECK
|
||
1C7F EB EX DE,HL
|
||
1C80 CD931C CALL SIGNPC
|
||
1C83 EB EX DE,HL
|
||
1C84 C9 RET
|
||
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 69
|
||
|
||
|
||
1C85 3ABA21 SIGNS: LD A,(SIGNF) ;CHECK FOR SIGN
|
||
1C88 E601 AND 1 ;EVEN OR ODD
|
||
1C8A C8 RET Z ;EVEN NUMBER OF NEGATIVES, ANSWER OK
|
||
1C8B AF SIGNCN: XOR A ;CHANGE SIGN
|
||
1C8C 95 SUB L
|
||
1C8D 6F LD L,A
|
||
1C8E 3E00 LD A,0
|
||
1C90 9C SBC A,H
|
||
1C91 67 LD H,A ;INVERTED HL
|
||
1C92 C9 RET
|
||
|
||
1C93 7C SIGNPC: LD A,H
|
||
1C94 B7 OR A
|
||
1C95 F0 RET P ;POSITIVE
|
||
1C96 3ABA21 LD A,(SIGNF)
|
||
1C99 3C INC A
|
||
1C9A 32BA21 LD (SIGNF),A
|
||
1C9D C38B1C JP SIGNCN ;CHANGE SIGN
|
||
|
||
1CA0 3ABB21 FLAGSU: LD A,(ARG1) ;SETUP FOR FLAG ROUTINES
|
||
1CA3 CDF41C CALL OBJLOC ;BC WILL HAVE BIT POSITION, DE FLAG VALUE
|
||
1CA6 3ABD21 LD A,(ARG2) ;HL WILL GET OBJ POINTER
|
||
1CA9 FE10 CP 16
|
||
1CAB DAB21C JP C,FLGSU1 ;NEXT WORD
|
||
1CAE D610 SUB 16 ;SECOND SET OF FLAGS
|
||
1CB0 23 INC HL
|
||
1CB1 23 INC HL
|
||
1CB2 E5 FLGSU1: PUSH HL
|
||
1CB3 47 LD B,A
|
||
1CB4 3E0F LD A,15
|
||
1CB6 90 SUB B
|
||
1CB7 210100 LD HL,1
|
||
1CBA CAC21C FLGSU2: JP Z,FLGSU3 ;BIT IN POSITION
|
||
1CBD 29 ADD HL,HL
|
||
1CBE 3D DEC A
|
||
1CBF C3BA1C JP FLGSU2
|
||
|
||
1CC2 44 FLGSU3: LD B,H
|
||
1CC3 4D LD C,L
|
||
1CC4 E1 POP HL
|
||
1CC5 56 LD D,(HL)
|
||
1CC6 23 INC HL
|
||
1CC7 5E LD E,(HL)
|
||
1CC8 2B DEC HL
|
||
1CC9 C9 RET
|
||
|
||
1CCA 3ABB21 PROPB: LD A,(ARG1) ;BEG OF PROPERTY PART OF OBJECT
|
||
1CCD CDF41C CALL OBJLOC
|
||
1CD0 110700 LD DE,7
|
||
1CD3 19 ADD HL,DE
|
||
1CD4 56 LD D,(HL)
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 70
|
||
|
||
|
||
1CD5 23 INC HL
|
||
1CD6 5E LD E,(HL)
|
||
1CD7 2AD921 LD HL,(ZCODEP)
|
||
1CDA 19 ADD HL,DE
|
||
1CDB 7E LD A,(HL) ;LENGTH OF DESCRIPTION
|
||
1CDC 87 ADD A,A ;*2
|
||
1CDD 3C INC A ;+1
|
||
1CDE C3081F JP HLOFF ;INDEX AND RETURN
|
||
|
||
1CE1 7E PROPN: LD A,(HL) ;HL HAS REAL PROP POINTER
|
||
1CE2 E61F AND 1FH
|
||
1CE4 C9 RET
|
||
|
||
1CE5 7E PROPL: LD A,(HL) ;PROP LENGTH, HL HAS REAL PROP POINTER
|
||
1CE6 07 RLCA
|
||
1CE7 07 RLCA
|
||
1CE8 07 RLCA
|
||
1CE9 E607 AND 7
|
||
1CEB C9 RET
|
||
|
||
1CEC CDE51C PROPNX: CALL PROPL
|
||
1CEF C602 ADD A,2
|
||
1CF1 C3081F JP HLOFF ;NEXT PROP POINTER
|
||
|
||
1CF4 D5 OBJLOC: PUSH DE ;GET OBJECT LOCATION, A HAS OBJECT NUMBER
|
||
1CF5 6F LD L,A
|
||
1CF6 2600 LD H,0
|
||
1CF8 54 LD D,H
|
||
1CF9 5D LD E,L
|
||
1CFA 29 ADD HL,HL
|
||
1CFB 29 ADD HL,HL
|
||
1CFC 29 ADD HL,HL
|
||
1CFD 19 ADD HL,DE
|
||
1CFE 113500 LD DE,53
|
||
1D01 19 ADD HL,DE ;9*NUMBER + 53
|
||
1D02 E5 PUSH HL ;OBJECT OFFSET
|
||
1D03 2AD921 LD HL,(ZCODEP)
|
||
1D06 110A00 LD DE,ZOBJEC
|
||
1D09 19 ADD HL,DE
|
||
1D0A 56 LD D,(HL)
|
||
1D0B 23 INC HL
|
||
1D0C 5E LD E,(HL)
|
||
1D0D 2AD921 LD HL,(ZCODEP)
|
||
1D10 19 ADD HL,DE
|
||
1D11 D1 POP DE
|
||
1D12 19 ADD HL,DE ;REAL ADDRESS
|
||
1D13 D1 POP DE
|
||
1D14 C9 RET
|
||
|
||
1D15 2ABB21 GETARG: LD HL,(ARG1)
|
||
1D18 EB EX DE,HL
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 71
|
||
|
||
|
||
1D19 2ABD21 LD HL,(ARG2) ;GET BOTH ARGS
|
||
1D1C C9 RET
|
||
|
||
1D1D 7A SHLGED: LD A,D
|
||
1D1E AC XOR H
|
||
1D1F F2251D JP P,HLGEDE ;BOTH OF SAME SIGN
|
||
1D22 7C LD A,H
|
||
1D23 BA CP D ;CARRY WILL BE SET IF D NEG AND THUS LESS THAN H
|
||
1D24 C9 RET
|
||
|
||
1D25 7A HLGEDE: LD A,D ;RETURN WITH CARRY SET IF HL>=DE
|
||
1D26 BC CP H
|
||
1D27 C0 RET NZ
|
||
1D28 7D LD A,L
|
||
1D29 BB CP E
|
||
1D2A 3F CCF
|
||
1D2B C9 RET
|
||
|
||
1D2C D5 PSHSTK: PUSH DE
|
||
1D2D EB EX DE,HL ;PUSH STACK
|
||
1D2E 2A070E LD HL,(ZSTAKP) ;STACK POINTER
|
||
1D31 2B DEC HL
|
||
1D32 73 LD (HL),E
|
||
1D33 2B DEC HL
|
||
1D34 72 LD (HL),D
|
||
1D35 22070E LD (ZSTAKP),HL ;SAVE POINTER
|
||
1D38 21A821 LD HL,ZSTAKC ;COUNT
|
||
1D3B 34 INC (HL)
|
||
1D3C 7E LD A,(HL)
|
||
1D3D FEE0 CP ZSTAKL
|
||
1D3F CC0602 CALL Z,ZER
|
||
1D42 EB EX DE,HL
|
||
1D43 D1 POP DE
|
||
1D44 C9 RET
|
||
; ---------
|
||
; POP STACK
|
||
; ---------
|
||
; POP WORD OFF Z-STACK AND RETURN IT IN HL
|
||
1D45 D5 POPSTK: PUSH DE ;SAVE DE
|
||
1D46 2A070E LD HL,(ZSTAKP) ;HL <= Z-STACK POINTER
|
||
1D49 56 LD D,(HL) ;GET MSB OF WORD
|
||
1D4A 23 INC HL
|
||
1D4B 5E LD E,(HL) ;GET LSB OF WORD
|
||
1D4C 23 INC HL
|
||
1D4D 22070E LD (ZSTAKP),HL ;SAVE NEW Z-STACK POINTER
|
||
1D50 21A821 LD HL,ZSTAKC ;CHECK COUNT
|
||
1D53 35 DEC (HL)
|
||
1D54 CC0602 CALL Z,ZER ;OVER POP ERROR
|
||
1D57 EB EX DE,HL ;VALUE IN HL
|
||
1D58 D1 POP DE ;RESTORE DE
|
||
1D59 C9 RET
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 72
|
||
|
||
|
||
;
|
||
; **********************************************************************
|
||
; * *
|
||
; * ZORK - PAGING ROUTINES *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
1D5A 3ACE21 NEXTPC: LD A,(ZPCFLG) ;HAS PAGE MOVED?
|
||
1D5D B7 OR A
|
||
1D5E CA871D JP Z,NXTPC1 ;PAGE HAS MOVED
|
||
1D61 2ACC21 LD HL,(ZPCPNT)
|
||
1D64 46 LD B,(HL) ;GET VALUE IN B
|
||
1D65 23 INC HL
|
||
1D66 22CC21 LD (ZPCPNT),HL ;STORE BACK POINTER
|
||
1D69 2AA621 LD HL,(ZPCL)
|
||
1D6C 2C INC L
|
||
1D6D 22A621 LD (ZPCL),HL ;ASSUME OK AT FIRST
|
||
1D70 78 LD A,B
|
||
1D71 C0 RET NZ ;OK IF L NOT ZERO
|
||
1D72 7C LD A,H ;CROSSED 256 BYTE BOUNDRY
|
||
1D73 24 INC H
|
||
1D74 22A621 LD (ZPCL),HL ;AGAIN ASSUME NOT PASSED 256 BOUNTRY
|
||
1D77 B7 OR A
|
||
1D78 78 LD A,B
|
||
1D79 C8 RET Z ;DID NOT CROSS 512 BOUNDRY
|
||
1D7A AF XOR A
|
||
1D7B 32A721 LD (ZPCL+1),A ;0 ZPCL
|
||
1D7E 32CE21 LD (ZPCFLG),A ;BAD DATA IN PCPNT, WILL HAVE TO FETCH NEW BLOCK
|
||
1D81 21A521 LD HL,ZPCH ;INCREMENT ZPC HIGH
|
||
1D84 34 INC (HL)
|
||
1D85 78 LD A,B
|
||
1D86 C9 RET ;RETURN, TROUBLE NEXT TIME
|
||
|
||
1D87 3AA521 NXTPC1: LD A,(ZPCH) ;GET ZPAGE NUMBER
|
||
1D8A 21B921 LD HL,ZMEMT ;TOP OF LOW MEM
|
||
1D8D BE CP (HL)
|
||
1D8E 2AD921 LD HL,(ZCODEP) ;PRELOAD PORTION
|
||
1D91 DAA61D JP C,NXTPCL
|
||
1D94 CD0F1F CALL FNDPGE
|
||
1D97 32CF21 LD (ZPCPG),A ;STORE PAGE
|
||
1D9A DAB91D JP C,NXTPC2 ;COULD NOT FIND PAGE, SWAP IT IN (OH WHAT A SHAME)
|
||
1D9D CDC91E NXTPC3: CALL SPLICE ;PUT AT TOP OF LIST
|
||
1DA0 3ACF21 LD A,(ZPCPG) ;SET UP POINTER TO PAGE
|
||
1DA3 2AD721 LD HL,(PGBUFP) ;POINTER TO BEGINNING OF PAGE BUFFERS
|
||
1DA6 NXTPCL:
|
||
1DA6 87 ADD A,A
|
||
1DA7 84 ADD A,H
|
||
1DA8 67 LD H,A
|
||
1DA9 EB EX DE,HL ;DE NOW HAS POINTER TO BEG OF BUFFER
|
||
1DAA 2AA621 LD HL,(ZPCL)
|
||
1DAD 19 ADD HL,DE ;ADD IN OFFSET
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 73
|
||
|
||
|
||
1DAE 22CC21 LD (ZPCPNT),HL ;ZPCPNT NOW VALID
|
||
1DB1 3EFF LD A,0FFH
|
||
1DB3 32CE21 LD (ZPCFLG),A
|
||
1DB6 C35A1D JP NEXTPC ;TRY AGAIN, THIS TIME IT WILL NOT FAIL
|
||
|
||
1DB9 21D621 NXTPC2: LD HL,MPCPG ;CHECK IF DISTROYING MPC
|
||
1DBC BE CP (HL)
|
||
1DBD C2C61D JP NZ,NXTPC4 ;NOT DISTROYING PAGE
|
||
1DC0 47 LD B,A
|
||
1DC1 AF XOR A
|
||
1DC2 32D521 LD (MPCFLG),A
|
||
1DC5 78 LD A,B
|
||
1DC6 2AD721 NXTPC4: LD HL,(PGBUFP)
|
||
1DC9 87 ADD A,A
|
||
1DCA 84 ADD A,H
|
||
1DCB 67 LD H,A ;POINTER TO BEGINNING OF BUFFER
|
||
1DCC 3AA521 LD A,(ZPCH)
|
||
1DCF CDF702 CALL GETDSK
|
||
1DD2 3ACF21 LD A,(ZPCPG)
|
||
1DD5 47 LD B,A
|
||
1DD6 21C90F LD HL,PGTBL
|
||
1DD9 CD081F CALL HLOFF
|
||
1DDC 3AA521 LD A,(ZPCH)
|
||
1DDF 77 LD (HL),A ;SET PAGE TABLE ENTRY
|
||
1DE0 78 LD A,B
|
||
1DE1 C39D1D JP NXTPC3 ;PAGE NOW IN MEMORY
|
||
|
||
1DE4 7C SETWRD: LD A,H
|
||
1DE5 B7 OR A
|
||
1DE6 1F RRA
|
||
1DE7 32D021 LD (MPCH),A
|
||
1DEA 7C SETWR1: LD A,H
|
||
1DEB E601 AND 1
|
||
1DED 67 LD H,A
|
||
1DEE 22D121 LD (MPCL),HL
|
||
1DF1 AF XOR A
|
||
1DF2 32D521 LD (MPCFLG),A
|
||
1DF5 C9 RET
|
||
|
||
1DF6 7C SETSTR: LD A,H
|
||
1DF7 32D021 LD (MPCH),A
|
||
1DFA 29 ADD HL,HL
|
||
1DFB C3EA1D JP SETWR1
|
||
|
||
1DFE AF GETFRE: XOR A
|
||
1DFF 32D521 LD (MPCFLG),A ;NO MEM PAGE LEFT
|
||
1E02 3ADD21 LD A,(PGBOT)
|
||
1E05 32D621 LD (MPCPG),A
|
||
1E08 CD961E CALL CKZPCP
|
||
1E0B CDC91E CALL SPLICE
|
||
1E0E 3AD621 LD A,(MPCPG)
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 74
|
||
|
||
|
||
1E11 47 LD B,A
|
||
1E12 2AD721 LD HL,(PGBUFP)
|
||
1E15 87 ADD A,A
|
||
1E16 84 ADD A,H
|
||
1E17 67 LD H,A
|
||
1E18 22D321 LD (MPCPNT),HL
|
||
1E1B 78 LD A,B
|
||
1E1C 21C90F LD HL,PGTBL
|
||
1E1F CD081F CALL HLOFF
|
||
1E22 3600 LD (HL),0
|
||
1E24 C9 RET
|
||
|
||
1E25 CD301E GETWRD: CALL GETBYT
|
||
1E28 F5 PUSH AF
|
||
1E29 CD301E CALL GETBYT ;GET A FULL WORD
|
||
1E2C 6F LD L,A
|
||
1E2D F1 POP AF
|
||
1E2E 67 LD H,A
|
||
1E2F C9 RET
|
||
|
||
1E30 3AD521 GETBYT: LD A,(MPCFLG) ;HAS PAGE MOVED?
|
||
1E33 B7 OR A
|
||
1E34 CA5D1E JP Z,GETBT1 ;PAGE HAS MOVED
|
||
1E37 2AD321 LD HL,(MPCPNT)
|
||
1E3A 46 LD B,(HL) ;GET VALUE IN B
|
||
1E3B 23 INC HL
|
||
1E3C 22D321 LD (MPCPNT),HL ;STORE BACK POINTER
|
||
1E3F 2AD121 LD HL,(MPCL)
|
||
1E42 2C INC L
|
||
1E43 22D121 LD (MPCL),HL ;ASSUME OK AT FIRST
|
||
1E46 78 LD A,B
|
||
1E47 C0 RET NZ ;OK IF L NOT ZERO
|
||
1E48 7C LD A,H ;CROSSED 256 BYTE BOUNDRY
|
||
1E49 24 INC H
|
||
1E4A 22D121 LD (MPCL),HL ;AGAIN ASSUME NOT PASSED 256 BOUNTRY
|
||
1E4D B7 OR A
|
||
1E4E 78 LD A,B
|
||
1E4F C8 RET Z ;DID NOT CROSS 512 BOUNDRY
|
||
1E50 AF XOR A
|
||
1E51 32D221 LD (MPCL+1),A ;0 MPCL
|
||
1E54 32D521 LD (MPCFLG),A ;BAD DATA IN PCPNT, WILL HAVE TO FETCH NEW BLOCK
|
||
1E57 21D021 LD HL,MPCH ;INCREMENT ZPC HIGH
|
||
1E5A 34 INC (HL)
|
||
1E5B 78 LD A,B
|
||
1E5C C9 RET ;RETURN, TROUBLE NEXT TIME
|
||
|
||
1E5D 3AB821 GETBT1: LD A,(VERF)
|
||
1E60 B7 OR A
|
||
1E61 C2A21E JP NZ,GETB1A ;IN VERIFY MODE
|
||
1E64 3AD021 LD A,(MPCH) ;GET MPAGE NUMBER
|
||
1E67 21B921 LD HL,ZMEMT ;TOP OF LOW MEM
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 75
|
||
|
||
|
||
1E6A BE CP (HL)
|
||
1E6B 2AD921 LD HL,(ZCODEP) ;PRELOAD PORTION
|
||
1E6E DA831E JP C,GETBTL
|
||
1E71 CD0F1F CALL FNDPGE
|
||
1E74 32D621 LD (MPCPG),A ;STORE PAGE
|
||
1E77 DAA81E JP C,GETBT2 ;COULD NOT FIND PAGE, SWAP IT IN (OH WHAT A SHAME)
|
||
1E7A CDC91E GETBT3: CALL SPLICE ;PUT AT TOP OF LIST
|
||
1E7D 3AD621 LD A,(MPCPG) ;SET UP POINTER TO PAGE
|
||
1E80 2AD721 LD HL,(PGBUFP) ;POINTER TO BEGINNING OF PAGE BUFFERS
|
||
1E83 GETBTL:
|
||
1E83 87 ADD A,A
|
||
1E84 84 ADD A,H
|
||
1E85 67 LD H,A
|
||
1E86 EB EX DE,HL
|
||
1E87 2AD121 LD HL,(MPCL)
|
||
1E8A 19 ADD HL,DE
|
||
1E8B 22D321 LD (MPCPNT),HL
|
||
1E8E 3EFF LD A,0FFH
|
||
1E90 32D521 LD (MPCFLG),A
|
||
1E93 C3301E JP GETBYT ;TRY AGAIN, THIS TIME IT WILL NOT FAIL
|
||
|
||
|
||
1E96 21CF21 CKZPCP: LD HL,ZPCPG ;CHECK IF DISTROYING ZPC
|
||
1E99 BE CP (HL)
|
||
1E9A C0 RET NZ ;NOT DISTROYING PAGE
|
||
1E9B 47 LD B,A
|
||
1E9C AF XOR A
|
||
1E9D 32CE21 LD (ZPCFLG),A
|
||
1EA0 78 LD A,B
|
||
1EA1 C9 RET
|
||
|
||
1EA2 3ADD21 GETB1A: LD A,(PGBOT)
|
||
1EA5 32D621 LD (MPCPG),A ;NEW PAGE
|
||
1EA8 CD961E GETBT2: CALL CKZPCP
|
||
1EAB 2AD721 LD HL,(PGBUFP)
|
||
1EAE 87 ADD A,A
|
||
1EAF 84 ADD A,H
|
||
1EB0 67 LD H,A ;POINTER TO BEGINNING OF BUFFER
|
||
1EB1 3AD021 LD A,(MPCH)
|
||
1EB4 CDF702 CALL GETDSK
|
||
1EB7 3AD621 LD A,(MPCPG)
|
||
1EBA 47 LD B,A
|
||
1EBB 21C90F LD HL,PGTBL
|
||
1EBE CD081F CALL HLOFF
|
||
1EC1 3AD021 LD A,(MPCH)
|
||
1EC4 77 LD (HL),A ;SET PAGE TABLE ENTRY
|
||
1EC5 78 LD A,B
|
||
1EC6 C37A1E JP GETBT3 ;PAGE NOW IN MEMORY
|
||
|
||
1EC9 4F SPLICE: LD C,A ;SPLICE PAGE IN A TO TOP OF LIST
|
||
1ECA 3ADC21 LD A,(PGTOP) ;GET OLD TOP
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 76
|
||
|
||
|
||
1ECD B9 CP C
|
||
1ECE C8 RET Z ;SAME TOP AS LAST
|
||
1ECF 47 LD B,A
|
||
1ED0 79 LD A,C
|
||
1ED1 32DC21 LD (PGTOP),A ;NEW TOP
|
||
1ED4 210910 LD HL,PGTBLF
|
||
1ED7 CD081F CALL HLOFF
|
||
1EDA 5E LD E,(HL) ;E HAS OLD FORWARD POINTER
|
||
1EDB 70 LD (HL),B ;NEW FORWARD TO OLD TOP
|
||
1EDC 214910 LD HL,PGTBLB
|
||
1EDF 79 LD A,C
|
||
1EE0 CD081F CALL HLOFF
|
||
1EE3 56 LD D,(HL) ;D GETS OLD BACK POINTER
|
||
1EE4 36FF LD (HL),0FFH ;TOP HAS NO BACK
|
||
1EE6 7A LD A,D
|
||
1EE7 210910 LD HL,PGTBLF
|
||
1EEA CD081F CALL HLOFF
|
||
1EED 73 LD (HL),E ;PATCH FORWARD POINTER
|
||
1EEE 78 LD A,B
|
||
1EEF 214910 LD HL,PGTBLB
|
||
1EF2 CD081F CALL HLOFF
|
||
1EF5 71 LD (HL),C
|
||
1EF6 7B LD A,E
|
||
1EF7 3C INC A
|
||
1EF8 CA031F JP Z,SPLIC1 ;WAS LAST BLOCK WITHOUT FORWARD POINTER
|
||
1EFB 214810 LD HL,PGTBLB-1 ;OFFSET INC A
|
||
1EFE CD081F CALL HLOFF
|
||
1F01 72 LD (HL),D ;SPLICE BACK POINTER
|
||
1F02 C9 RET
|
||
|
||
1F03 7A SPLIC1: LD A,D
|
||
1F04 32DD21 LD (PGBOT),A ;NEW BOTTOM OF LIST
|
||
1F07 C9 RET
|
||
|
||
1F08 HLOFF:
|
||
1F08 85 ADD A,L ;INDIRECT HL THROUGH A
|
||
1F09 6F LD L,A
|
||
1F0A 3E00 LD A,0
|
||
1F0C 8C ADC A,H
|
||
1F0D 67 LD H,A
|
||
1F0E C9 RET
|
||
|
||
1F0F 21DB21 FNDPGE: LD HL,NPGS ;FIND PAGE IN A, RETURN WITH CARRY
|
||
1F12 ;SET IF NOT FOUND. A WILL HAVE FOUND PAGE OR
|
||
1F12 ;BOTTOM OF PAGE LIST
|
||
1F12 46 LD B,(HL)
|
||
1F13 0E00 LD C,0
|
||
1F15 21C90F LD HL,PGTBL
|
||
1F18 BE FNDPGL: CP (HL)
|
||
1F19 CA271F JP Z,FNDPG1 ;SUCCESS
|
||
1F1C 0C INC C
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 77
|
||
|
||
|
||
1F1D 23 INC HL
|
||
1F1E 05 DEC B
|
||
1F1F C2181F JP NZ,FNDPGL
|
||
1F22 3ADD21 LD A,(PGBOT) ;NOT FOUND
|
||
1F25 37 SCF ;SET CARRY AND RETURN BOTTOM
|
||
1F26 C9 RET
|
||
|
||
1F27 79 FNDPG1: LD A,C
|
||
1F28 C9 RET ;CARRY WILL BE CLEARED
|
||
;
|
||
; **********************************************************************
|
||
; * *
|
||
; * ZORK - STRING ROUTINES *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
; ---------------
|
||
; PRINT Z-STRING
|
||
; ---------------
|
||
1F29 AF PZSTR: XOR A ;PRINT ZSTRING POINTED TO BY MPC (NOT REENTRENT)
|
||
1F2A 32DF21 LD (CSPERM),A ;PERMANENT CHARSET
|
||
1F2D 32E021 LD (STBYTF),A ;RESET STRING BYTE FLAG
|
||
1F30 3D DEC A
|
||
1F31 32DE21 LD (CSTEMP),A ;NO TEMP CHARSET IN EFFECT
|
||
|
||
1F34 CD4F20 PZSTRL: CALL GETZCH ;GET A Z-CHARACTER
|
||
1F37 D8 RET C ;END OF STRING IF CARRY SET
|
||
1F38 47 LD B,A
|
||
1F39 B7 OR A
|
||
1F3A CAEF1F JP Z,PZSTRS ;0=SPACE
|
||
1F3D FE04 CP 4 ;IS THIS AN F-WORD?
|
||
1F3F DA8E1F JP C,PZFWRD ; YES.
|
||
1F42 FE06 CP 6 ;IS IT A SHIFT CHAR?
|
||
1F44 DA0720 JP C,PZSTRP ; YES. CHANGE CHAR SET
|
||
1F47 CD3E20 CALL GETMOD
|
||
1F4A B7 OR A ;IS IT CHARSET 0?
|
||
1F4B C2581F JP NZ,PZSTR1 ; NOPE.
|
||
|
||
;PRINT LOWER CASE CHAR (CHARSET 0)
|
||
1F4E 3E5B LD A,'a'-6 ;ASCII "a" MINUS Z-OFFSET
|
||
1F50 PZSTP0:
|
||
1F50 80 ADD A,B ;ADD CHARACTER
|
||
1F51 4F LD C,A
|
||
1F52 CDB604 PZSTP1: CALL COUT ;PRINT RESULT
|
||
1F55 C3341F JP PZSTRL ;AND FETCH ANOTHER Z-CHAR
|
||
|
||
;CHARSET 1 OR 2?
|
||
1F58 3D PZSTR1: DEC A ;SET 1?
|
||
1F59 C2611F JP NZ,PZSTR2 ; NOPE, IT'S SET 2
|
||
|
||
;PRINT UPPER-CASE CHAR (CHARSET 1)
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 78
|
||
|
||
|
||
1F5C 3E3B LD A,'A'-6 ;ASCII "A" MINUS Z-OFFSET
|
||
1F5E C3501F JP PZSTP0 ;PROCESS IT
|
||
|
||
;DECODE/PRINT CHARSET 2
|
||
1F61 78 PZSTR2: LD A,B ;MODE 2
|
||
1F62 FE06 CP 6 ;DIRECT ASCII CHARACTER?
|
||
1F64 CA761F JP Z,PZSTRA ; YES.
|
||
1F67 FE07 CP 7 ;CARRIAGE RETURN?
|
||
1F69 CAF41F JP Z,PZSTRC ; YES.
|
||
1F6C 211E20 LD HL,CHRTBL-8 ; NO. SUBTRACT OFFSET
|
||
1F6F CD081F CALL HLOFF
|
||
1F72 4E LD C,(HL) ;GET CHARACTER FROM TABLE
|
||
1F73 C3521F JP PZSTP1
|
||
|
||
1F76 CD4F20 PZSTRA: CALL GETZCH ;FORM CHARACTER FROM TWO BYTES
|
||
1F79 0F RRCA
|
||
1F7A 0F RRCA
|
||
1F7B 0F RRCA
|
||
1F7C 4F LD C,A
|
||
1F7D C5 PUSH BC
|
||
1F7E CD4F20 CALL GETZCH
|
||
1F81 C1 POP BC
|
||
1F82 81 ADD A,C
|
||
1F83 4F LD C,A
|
||
1F84 FE09 CP 9 ;TAB?
|
||
1F86 C2521F JP NZ,PZSTP1
|
||
1F89 0E20 LD C,20H
|
||
1F8B C3521F JP PZSTP1 ;PRINT IT
|
||
|
||
1F8E 3D PZFWRD: DEC A
|
||
1F8F 87 ADD A,A
|
||
1F90 87 ADD A,A
|
||
1F91 87 ADD A,A
|
||
1F92 87 ADD A,A
|
||
1F93 87 ADD A,A ;SET NUMBER -1 TIMES 32
|
||
1F94 32C721 LD (FWSET),A
|
||
1F97 CD4F20 CALL GETZCH ;GET STRING NUMBER
|
||
1F9A D8 RET C ;BAD IF OUT OF CHARACTERS
|
||
1F9B 47 LD B,A
|
||
1F9C 3ADF21 LD A,(CSPERM) ;PRINT ZSTRING POINTED TO BY MPC
|
||
1F9F 67 LD H,A ;MAKE IT REENTERENT
|
||
1FA0 3AE021 LD A,(STBYTF)
|
||
1FA3 6F LD L,A
|
||
1FA4 E5 PUSH HL
|
||
1FA5 2AE121 LD HL,(ZSTWRD)
|
||
1FA8 E5 PUSH HL
|
||
1FA9 2AD121 LD HL,(MPCL)
|
||
1FAC E5 PUSH HL
|
||
1FAD 2AD021 LD HL,(MPCH)
|
||
1FB0 E5 PUSH HL
|
||
1FB1 2AC821 LD HL,(FWORDS)
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 79
|
||
|
||
|
||
1FB4 3AC721 LD A,(FWSET)
|
||
1FB7 80 ADD A,B ;ENTRY INTO 96 WORD TABLE
|
||
1FB8 87 ADD A,A
|
||
1FB9 CD081F CALL HLOFF ;POINTER TO SPECIAL STRING
|
||
1FBC 7E LD A,(HL)
|
||
1FBD 32D021 LD (MPCH),A
|
||
1FC0 23 INC HL
|
||
1FC1 6E LD L,(HL)
|
||
1FC2 2600 LD H,0
|
||
1FC4 29 ADD HL,HL
|
||
1FC5 22D121 LD (MPCL),HL ;SET NEW MPC
|
||
1FC8 AF XOR A
|
||
1FC9 32D521 LD (MPCFLG),A ;MPCPNT NOT VALID
|
||
1FCC CD291F CALL PZSTR ;PRINT SUB STRING (REENTRENT VERSION)
|
||
1FCF AF XOR A ;RESTORE REENTRENT VALUES
|
||
1FD0 32D521 LD (MPCFLG),A
|
||
1FD3 E1 POP HL
|
||
1FD4 7D LD A,L
|
||
1FD5 32D021 LD (MPCH),A
|
||
1FD8 E1 POP HL
|
||
1FD9 22D121 LD (MPCL),HL
|
||
1FDC E1 POP HL
|
||
1FDD 22E121 LD (ZSTWRD),HL
|
||
1FE0 E1 POP HL
|
||
1FE1 7C LD A,H
|
||
1FE2 32DF21 LD (CSPERM),A
|
||
1FE5 7D LD A,L
|
||
1FE6 32E021 LD (STBYTF),A
|
||
1FE9 CD3E20 CALL GETMOD
|
||
1FEC C3341F JP PZSTRL
|
||
|
||
1FEF 0E20 PZSTRS: LD C,20H
|
||
1FF1 C3521F JP PZSTP1 ;PRINT SPACE
|
||
|
||
1FF4 0E0D PZSTRC: LD C,0DH ;CR-LF
|
||
1FF6 CDB604 CALL COUT
|
||
1FF9 0E0A LD C,0AH
|
||
1FFB C3521F JP PZSTP1
|
||
|
||
1FFE 78 PZSTRT: LD A,B ;SET TEMP MODE
|
||
1FFF D603 SUB 3
|
||
2001 32DE21 LD (CSTEMP),A
|
||
2004 C3341F JP PZSTRL
|
||
|
||
2007 CD3E20 PZSTRP: CALL GETMOD ;SET CHAR MODE
|
||
200A B7 OR A ;MODE 0 IS TEMPORARY
|
||
200B CAFE1F JP Z,PZSTRT
|
||
200E 3D DEC A
|
||
200F 87 ADD A,A
|
||
2010 80 ADD A,B
|
||
2011 D604 SUB 4 ;INDEX INTO PERMTB
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 80
|
||
|
||
|
||
2013 E5 PUSH HL
|
||
2014 212220 LD HL,PERMTB
|
||
2017 CD081F CALL HLOFF
|
||
201A 7E LD A,(HL)
|
||
201B E1 POP HL
|
||
201C 32DF21 LD (CSPERM),A
|
||
201F C3341F JP PZSTRL
|
||
|
||
2022 01000002 PERMTB: DB 1,0,0,2
|
||
|
||
2026 30313233 CHRTBL: DB '0123456789.,!?_#'
|
||
2036 2722 DB $27,$22
|
||
2038 2F5C2D3A DB '/\-:()'
|
||
|
||
203E 3ADE21 GETMOD: LD A,(CSTEMP)
|
||
2041 3C INC A
|
||
2042 3ADF21 LD A,(CSPERM)
|
||
2045 C8 RET Z ;RETURN WITH PERM MODE IF NO TEMP MODE
|
||
2046 E5 PUSH HL
|
||
2047 21DE21 LD HL,CSTEMP
|
||
204A 7E LD A,(HL)
|
||
204B 36FF LD (HL),0FFH ;CLEAR MODE AFTER GETTING IT
|
||
204D E1 POP HL
|
||
204E C9 RET
|
||
|
||
204F 3AE021 GETZCH: LD A,(STBYTF) ;FIND OUT WHICH BYTE
|
||
2052 B7 OR A
|
||
2053 37 SCF
|
||
2054 F8 RET M ;OUT OF CHARACTERS
|
||
2055 C26820 JP NZ,GETZH1 ;NOT FIRST BYTE
|
||
2058 3C INC A
|
||
2059 32E021 LD (STBYTF),A
|
||
205C CD251E CALL GETWRD
|
||
205F 22E121 LD (ZSTWRD),HL ;SAVE WORD
|
||
2062 7C LD A,H
|
||
2063 0F RRCA
|
||
2064 0F RRCA
|
||
2065 E61F AND 1FH
|
||
2067 C9 RET
|
||
|
||
2068 3D GETZH1: DEC A
|
||
2069 C27B20 JP NZ,GETZH2 ;LAST CHAR IN WORD
|
||
206C 3E02 LD A,2
|
||
206E 32E021 LD (STBYTF),A
|
||
2071 2AE121 LD HL,(ZSTWRD)
|
||
2074 29 ADD HL,HL
|
||
2075 29 ADD HL,HL
|
||
2076 29 ADD HL,HL
|
||
2077 7C LD A,H
|
||
2078 E61F AND 1FH
|
||
207A C9 RET
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 81
|
||
|
||
|
||
|
||
207B AF GETZH2: XOR A
|
||
207C 32E021 LD (STBYTF),A
|
||
207F 2AE121 LD HL,(ZSTWRD)
|
||
2082 7C LD A,H
|
||
2083 B7 OR A
|
||
2084 F28C20 JP P,GETZH3 ;NOT LAST CHAR IN STRING
|
||
2087 3EFF LD A,0FFH
|
||
2089 32E021 LD (STBYTF),A ;INDICATE END OF STRING
|
||
208C 7D GETZH3: LD A,L
|
||
208D E61F AND 1FH
|
||
208F C9 RET
|
||
|
||
2090 AF CONZST: XOR A ;CONVERT TO Z STRING
|
||
2091 32DF21 LD (CSPERM),A
|
||
2094 21E321 LD HL,ZSTBUO ;POINTER TO OUTPUT BUFFER
|
||
2097 0606 LD B,6 ;OUTPUT 6 CHARACTERS TO CONVERT
|
||
2099 3605 CONZSL: LD (HL),5
|
||
209B 23 INC HL
|
||
209C 05 DEC B
|
||
209D C29920 JP NZ,CONZSL ;FILL BUFFER WITH PAD CHARACTERS
|
||
20A0 0606 LD B,6
|
||
20A2 11E321 LD DE,ZSTBUO ;OUTPUT
|
||
20A5 21B021 LD HL,ZSTBUI ;INPUT
|
||
20A8 4E CNZSL1: LD C,(HL)
|
||
20A9 23 INC HL
|
||
20AA 79 LD A,C
|
||
20AB B7 OR A
|
||
20AC 3E05 LD A,5
|
||
20AE CADD20 JP Z,CNZSLO ;BLANKS
|
||
20B1 79 LD A,C
|
||
20B2 FE20 CP ' '
|
||
20B4 3E00 LD A,0
|
||
20B6 CADD20 JP Z,CNZSLO ;SPACE
|
||
20B9 D5 CNZSL2: PUSH DE
|
||
20BA 79 LD A,C
|
||
20BB CD3B21 CALL ZCHRCS ;WHICH CHARACTER SET
|
||
20BE 5F LD E,A ;E HAS CHARACTER SET OF CURRENT CHAR
|
||
20BF 3ADF21 LD A,(CSPERM)
|
||
20C2 BB CP E
|
||
20C3 CAD120 JP Z,CNZSLC ;CONVERT THEN OUTPUT
|
||
20C6 7B LD A,E
|
||
20C7 C603 ADD A,3
|
||
20C9 D1 POP DE
|
||
20CA 12 LD (DE),A ;OUTPUT TEMP SHIFT
|
||
20CB 13 INC DE
|
||
20CC 05 DEC B
|
||
20CD CA5A21 JP Z,CNZSLE
|
||
20D0 D5 PUSH DE
|
||
20D1 79 CNZSLC: LD A,C
|
||
20D2 D1 POP DE
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 82
|
||
|
||
|
||
20D3 CD3B21 CALL ZCHRCS
|
||
20D6 3D DEC A
|
||
20D7 F2E620 JP P,CNZSC1 ;NOT LOWER CASE
|
||
20DA 79 LD A,C
|
||
20DB D65B SUB 'a'-6
|
||
20DD 12 CNZSLO: LD (DE),A
|
||
20DE 13 INC DE
|
||
20DF 05 DEC B
|
||
20E0 C2A820 JP NZ,CNZSL1 ;NEXT
|
||
20E3 C35A21 JP CNZSLE ;END
|
||
|
||
20E6 C2EF20 CNZSC1: JP NZ,CNZSC3 ;NOT UPPER CASE
|
||
20E9 79 LD A,C
|
||
20EA D63B SUB 'A'-6
|
||
20EC C3DD20 JP CNZSLO
|
||
|
||
20EF 79 CNZSC3: LD A,C
|
||
20F0 FE0D CP 0DH
|
||
20F2 C20121 JP NZ,CNZSC4
|
||
20F5 7E LD A,(HL)
|
||
20F6 FE0A CP 0AH
|
||
20F8 C20121 JP NZ,CNZSC4
|
||
20FB 23 INC HL
|
||
20FC 3E07 LD A,7
|
||
20FE C3DD20 JP CNZSLO ;CR-LF
|
||
|
||
2101 79 CNZSC4: LD A,C
|
||
2102 CD2221 CALL CNZS2M
|
||
2105 C2DD20 JP NZ,CNZSLO ;FOUND IN TABLE
|
||
2108 3E06 LD A,6
|
||
210A 12 LD (DE),A
|
||
210B 13 INC DE
|
||
210C 05 DEC B
|
||
210D CA5A21 JP Z,CNZSLE ;STORE ASCII VERSION
|
||
2110 79 LD A,C
|
||
2111 07 RLCA
|
||
2112 07 RLCA
|
||
2113 07 RLCA
|
||
2114 E603 AND 3
|
||
2116 12 LD (DE),A
|
||
2117 13 INC DE
|
||
2118 05 DEC B
|
||
2119 CA5A21 JP Z,CNZSLE
|
||
211C 79 LD A,C
|
||
211D E61F AND 1FH
|
||
211F C3DD20 JP CNZSLO
|
||
|
||
2122 C5 CNZS2M: PUSH BC
|
||
2123 E5 PUSH HL
|
||
2124 213D20 LD HL,CHRTBL+23 ;SEARCH TABLE
|
||
2127 0618 LD B,24
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 83
|
||
|
||
|
||
2129 BE CNZS2L: CP (HL)
|
||
212A CA3521 JP Z,CNZS2P ;FOUND
|
||
212D 2B DEC HL
|
||
212E 05 DEC B
|
||
212F C22921 JP NZ,CNZS2L
|
||
2132 E1 POP HL ;NOT FOUND
|
||
2133 C1 POP BC
|
||
2134 C9 RET ;FAIL, ZERO SET
|
||
|
||
2135 78 CNZS2P: LD A,B
|
||
2136 C607 ADD A,7
|
||
2138 E1 POP HL
|
||
2139 C1 POP BC
|
||
213A C9 RET ;PASSED, ZERO CLEARED
|
||
|
||
213B FE61 ZCHRCS: CP 'a'
|
||
213D DA4721 JP C,ZCHRC1
|
||
2140 FE7B CP 'z'+1
|
||
2142 D24721 JP NC,ZCHRC1
|
||
2145 AF XOR A
|
||
2146 C9 RET ;SET 0
|
||
|
||
2147 FE41 ZCHRC1: CP 'A'
|
||
2149 DA5421 JP C,ZCHRC2
|
||
214C FE5B CP 'Z'+1
|
||
214E D25421 JP NC,ZCHRC2
|
||
2151 3E01 LD A,1
|
||
2153 C9 RET
|
||
|
||
2154 B7 ZCHRC2: OR A
|
||
2155 C8 RET Z
|
||
2156 F8 RET M ;END
|
||
2157 3E02 LD A,2
|
||
2159 C9 RET ;ELSE SET 2
|
||
|
||
215A 01E321 CNZSLE: LD BC,ZSTBUO ;CONVERT OUTPUT STRING
|
||
215D 210000 LD HL,0
|
||
2160 54 LD D,H
|
||
2161 CD7D21 CALL CNZSE1
|
||
2164 CD7D21 CALL CNZSE1
|
||
2167 CD7D21 CALL CNZSE1
|
||
216A 22E321 LD (ZSTBUO),HL
|
||
216D 210100 LD HL,1
|
||
2170 CD7D21 CALL CNZSE1
|
||
2173 CD7D21 CALL CNZSE1
|
||
2176 CD7D21 CALL CNZSE1
|
||
2179 22E521 LD (ZSTBUO+2),HL
|
||
217C C9 RET
|
||
|
||
217D 0A CNZSE1: LD A,(BC)
|
||
217E 03 INC BC
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 84
|
||
|
||
|
||
217F 5F LD E,A
|
||
2180 29 ADD HL,HL
|
||
2181 29 ADD HL,HL
|
||
2182 29 ADD HL,HL
|
||
2183 29 ADD HL,HL
|
||
2184 29 ADD HL,HL
|
||
2185 19 ADD HL,DE
|
||
2186 C9 RET
|
||
;
|
||
; **********************************************************************
|
||
; * *
|
||
; * ZORK - DATA SECTION *
|
||
; * *
|
||
; **********************************************************************
|
||
;
|
||
2187 SRND: ;RANDOM INFO FOR SAVE, KEEP TOGETHER
|
||
2187 LOCALS: DS 15*2 ;STORAGE FOR LOCALS
|
||
21A5 00 ZPCH: DB 0 ;HIGH ORDER 8 BITS OF ZPC
|
||
21A6 0000 ZPCL: DW 0 ;LOW ORDER 9 BITS OF ZPC
|
||
21A8 01 ZSTAKC: DB 1 ;STACK COUNT, 1=>0 IMPLIES OVERPOP, NEG=> OVER PUSH
|
||
21A9 0000 OZSTKP: DW 0 ;OLD ZSTACK POINTER
|
||
21AB 00 OZSTKC: DB 0 ;OLD ZSTACK COUNT
|
||
;
|
||
21AC 6A573C99 SHIFT: DB 6AH,57H,3CH,99H
|
||
0029 SRNDC EQU $-SRND
|
||
21B0 ZSTBUI: DS 6 ;ZSTR INPUT BUFFER
|
||
21B6 FF DB 0FFH ;END MARKER
|
||
21B7 01 NOLPT: DB 1 ;NON ZERO IMPLIES DO NOT USE LPT
|
||
21B8 00 VERF: DB 0 ;1 IF IN VERIFY MODE.
|
||
21B9 01 ZMEMT: DB 1 ;FIRST PAGE IN SWAPPING SPACE
|
||
|
||
21BA PURSTP: ;END OF PURE
|
||
|
||
21BA 00 SIGNF: DB 0 ;STORAGE FOR SIGN IN MULT AND DIVIDE
|
||
21BB 0000 ARG1: DW 0 ;OPERRAND 1
|
||
21BD 0000 ARG2: DW 0 ;" 2
|
||
21BF 0000 ARG3: DW 0 ;" 3
|
||
21C1 0000 ARG4: DW 0 ;" 4
|
||
21C3 00 ARGCNT: DB 0 ;ARG COUNT
|
||
21C4 00 OPCODE: DB 0 ;CURRENT OPCODE
|
||
21C5 0000 GLOBAL: DW 0 ;POINTER TO GLOBAL 0
|
||
21C7 00 FWSET: DB 0 ;TEMPORARY STORAGE FOR FWORDS CALCULATION
|
||
21C8 0000 FWORDS: DW 0 ;COMMON WORDS POINTER
|
||
21CA 0000 ZPCOFF: DW 0 ;OFFSET FOR FAST JUMPS
|
||
21CC 0000 ZPCPNT: DW 0 ;REAL POINTER TO PC
|
||
21CE 00 ZPCFLG: DB 0 ;0FFH IF VALID PC POINTER
|
||
21CF 00 ZPCPG: DB 0 ;PAGE OF ZPC
|
||
21D0 00 MPCH: DB 0 ;HIGH ORDER 8 BITS OF MEMORY POINTER
|
||
21D1 0000 MPCL: DW 0 ;LOW ORDER 9 BITS OF MEMPOINTER
|
||
21D3 0000 MPCPNT: DW 0 ;REAL POINTER TO MEMORY LOCATION
|
||
21D5 00 MPCFLG: DB 0 ;0FF IF VALID MPCPNT
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 85
|
||
|
||
|
||
21D6 00 MPCPG: DB 0 ;PAGE NUMBER OF PC PAGE
|
||
;
|
||
;PAGE TABLES
|
||
21D7 0000 PGBUFP: DW 0 ;BUFFER POINTER
|
||
21D9 0000 ZCODEP: DW 0 ;LOW MEM STARTING POINTER
|
||
;
|
||
21DB 00 NPGS: DB 0 ;NUMBER OF PAGES
|
||
21DC 00 PGTOP: DB 0 ;TOP OF LIST PAGE
|
||
21DD 3F PGBOT: DB MAXPGS-1 ;BOTTOM OF LIST
|
||
;
|
||
21DE 00 CSTEMP: DB 0 ;-1 IF NOT TEMP CHAR SET, ELSE SET
|
||
21DF 00 CSPERM: DB 0 ;PERM CHARACTER SET
|
||
21E0 00 STBYTF: DB 0 ;0 FOR FIRST BYTE, 1 FOR 2, 2 FOR 3, 0FFH FOR END
|
||
21E1 0000 ZSTWRD: DW 0 ;WORD STORRAGE
|
||
21E3 ZSTBUO: DS 6 ;OUTPUT BUFFER
|
||
21E9 0000 RTABP: DW 0 ;TEMP FOR ZREAD, RESULT TABLE POINTER
|
||
;
|
||
21EB 0000 LMEMRY: DW 0 ;LAST LOCATION IN MEMORY, FILLED IN BY LOADER
|
||
;
|
||
0100 END START
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 86
|
||
---- SYMBOL TABLE ----
|
||
|
||
ARG1 21BB CPLMAX 0085 FLSLIN 04F7 GETVR1 1302 LOCALS 2187
|
||
ARG2 21BD CPMBUF 0080 FLUSHW 1A9F GETVRG 1316 LPCHK 049B
|
||
ARG3 21BF CPMCLF 010D FNDAT 02C7 GETVRL 1307 LPDL 0190
|
||
ARG4 21C1 CPMCPL 0103 FNDPG1 1F27 GETVRS 1322 LPINIT 05B4
|
||
ARGCNT 21C3 CPMCR 007C FNDPGE 1F0F GETWRD 1E25 LPTO 0586
|
||
BADOP 15BF CPMDRV 005C FNDPGL 1F18 GETZCH 204F LSTADR 0006
|
||
BAND 170E CPMFCB 005C FNPRE 02DF GETZH1 2068 MAKEF 0016
|
||
BCOM 169C CPMFEX 0065 FNPUR 02D3 GETZH2 207B MAXPGS 0040
|
||
BDOS 0005 CPMFN 0105 FRSTQ1 1562 GETZH3 208C MEMTOP 0209
|
||
BODY 10A6 CPMFNB 005D FSET 1729 GLOBAL 21C5 MEMTP1 0212
|
||
BOR 1702 CPMINV 010F FSETQ 171A GRTRQ 16B5 MLOOP 1210
|
||
BRKTBL 1AE3 CPMLLF 010E FSTACK 14D5 GTDSK1 0326 MORCNT 0C76
|
||
BSTLIN 0152 CPMLPP 0104 FWFAIL 1B72 HLGEDE 1D25 MORE 0701
|
||
BTST 16F0 CPMRCD 0019 FWL1 1B0B HLOFF 1F08 MORE1 0722
|
||
CCI 0001 CPMRDS 000D FWL1A 1B07 IGRTQ1 16D3 MORMSG 06E2
|
||
CCO 0002 CPMREC 007D FWL2 1B10 IGRTRQ 16CC MOVE 1751
|
||
CDIO 0006 CPMSEL 000E FWL3 1B25 INC 1593 MOVESG 0012
|
||
CDISK 0004 CPMSTR 0200 FWL4 1B3A INC1 159F MOVIT 034B
|
||
CGCONS 000B CPSTNG 0009 FWL4A 1B68 INC2 15A6 MPCFLG 21D5
|
||
CHARS 0BEE CRCBUF 000A FWL4B 1B67 INQ 16DC MPCH 21D0
|
||
CHRPNT 0C73 CRESET 0000 FWL4C 1B66 IOBYTE 0003 MPCL 21D1
|
||
CHRPOS 06A3 CRLF 14DE FWORDS 21C8 ITRMST 0110 MPCPG 21D6
|
||
CHRTBL 2026 CRMSG 094E FWSET 21C7 JUMP 167E MPCPNT 21D3
|
||
CIN 0438 CSPERM 21DF FWSUCC 1B76 LESSQ 16A8 MSGCRC 0A82
|
||
CIN1 043B CSTEMP 21DE GET 177D LFILC 0BD5 MSGOUT 0A66
|
||
CIN2 0451 DBUFP 0BEB GETARG 1D15 LFILD 0B93 MSGRES 0942
|
||
CKZPCP 1E96 DDIV0 1C54 GETB 178F LFILD1 0B9F MUL 1851
|
||
CLEARS 0585 DDIV1 1C5A GETB1A 1EA2 LFILDG 0950 MUL1 186F
|
||
CLO 0005 DEC 1599 GETBT1 1E5D LFILDM 098D MUL2 1878
|
||
CLOSE 0010 DEC1 15AC GETBT2 1EA8 LFILF 0B8C MUL4 1875
|
||
CNZS2L 2129 DELETE 0013 GETBT3 1E7A LFILGM 09DD MULT 1C1C
|
||
CNZS2M 2122 DIV 187D GETBTL 1E83 LFILP 0BB3 MULT1 1C22
|
||
CNZS2P 2135 DIV2 189E GETBYT 1E30 LFILP1 0BBF MULT2 1C2E
|
||
CNZSC1 20E6 DIV2A 18AC GETDK2 0318 LFILPM 09B5 NBRKS 000A
|
||
CNZSC3 20EF DIV2B 189F GETDSK 02F7 LFILR 0BD3 NCHARS 0BED
|
||
CNZSC4 2101 DIV4 18A5 GETFRE 1DFE LFILS 0B63 NEXTP 1814
|
||
CNZSE1 217D DIVIDE 1C45 GETLNG 12ED LFILS1 0B70 NEXTP1 181E
|
||
CNZSL1 20A8 DLESSQ 16C1 GETMOD 203E LINFUL 0521 NEXTP2 1832
|
||
CNZSL2 20B9 EQUALQ 18C2 GETP 17A3 LINOCR 0574 NEXTP3 1838
|
||
CNZSLC 20D1 EQUAQ1 18E3 GETP1 17A6 LINOT1 0516 NEXTPC 1D5A
|
||
CNZSLE 215A ESTLIN 0173 GETP2 17D7 LINOT2 0528 NEXTQ 154D
|
||
CNZSLO 20DD FALSE 0000 GETP2A 17E9 LINOT3 0532 NOLPT 21B7
|
||
CONZSL 2099 FBRK 1AC3 GETP3 17BA LINOT4 055E NPGS 21DB
|
||
CONZST 2090 FCLEAR 1736 GETPRE 0315 LINOT5 0566 NXTPC1 1D87
|
||
CORET 04F3 FILTYP 0C75 GETPT 17EF LINOT6 0549 NXTPC2 1DB9
|
||
COUT 04B6 FINDW 1AED GETPT1 17F2 LINOT7 0555 NXTPC3 1D9D
|
||
COUT1 04D3 FIRSTQ 1559 GETPT2 1806 LINOTR 0572 NXTPC4 1DC6
|
||
COUTBS 03B1 FLAGSU 1CA0 GETSHT 12E4 LINOUT 0502 NXTPCL 1DA6
|
||
COUTCR 04AE FLGSU1 1CB2 GETVAR 12FA LMEMRY 21EB OBJLOC 1CF4
|
||
COUTD 045E FLGSU2 1CBA GETVL1 130F LMORE 001F OP0 1280
|
||
COUTDC 0BE5 FLGSU3 1CC2 GETVOC 1AD4 LOC 1573 OP0M 000E
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 87
|
||
---- SYMBOL TABLE ----
|
||
|
||
OP0T 13F4 PRFLG 0BE7 QUIT 0749 SAVEA 07C2 USL 14E4
|
||
OP1 128D PRINT 1687 RANDOM 1BCD SCOREG 0011 VALUE 1693
|
||
OP1M 0010 PRINT1 168D RBRK1 1AB7 SCPLOC 0BE8 VARGET 1359
|
||
OP1T 1410 PRINT2 15B9 RBRK2 1AC0 SCPVAL 0BEA VARGTS 135E
|
||
OP2 12B6 PRINTB 15B6 RBRKQ 1AAD SETFIL 02AA VARPTR 174B
|
||
OP2EX 12D7 PRINTC 1B84 RD0PL 1A27 SETFL1 02BF VARPTS 1369
|
||
OP2M 0019 PRINTD 1618 RDBFC1 03F9 SETSTR 1DF6 VARPUT 1365
|
||
OP2T 1430 PRINTI 1485 RDBFC2 03EF SETWR1 1DEA VERF 21B8
|
||
OPCODE 21C4 PRINTN 1B8E RDBFC3 03DE SETWRD 1DE4 VERIFL 1513
|
||
OPDSPH 126F PRINTR 14B7 RDBFC4 03E6 SFAIL 0835 VERIFY 14EA
|
||
OPEN 000F PRNTDC 1621 RDBFCR 03C0 SFAIL1 0850 VRLINE 109A
|
||
OPEXT 1229 PRNTI1 148B RDBFFL 041A SHIFT 21AC VRS 1089
|
||
OPEXTF 125D PRNTN1 1B9E RDBFR1 0407 SHLGED 1D1D WARM 0000
|
||
OPEXTL 1232 PRNTN3 1BAE RDBFR2 0415 SIBRKQ 1AC6 WHOLIN 05C1
|
||
OPEXTM 000A PRNTN4 1BB3 RDBFRO 03A3 SIGNC 1C78 WHOLN1 0645
|
||
OPEXTT 1462 PRNTN6 1BC0 RDBFRT 03FE SIGNCN 1C8B WHOLN2 0614
|
||
OPNDK1 021B PRNTNC 1B97 RDFLG 0BE6 SIGNF 21BA WHOLT 0653
|
||
OZSTKC 21AB PRNTNG 1BC5 READB1 036B SIGNPC 1C93 WHOLT0 066C
|
||
OZSTKP 21A9 PROPB 1CCA READB2 0398 SIGNS 1C85 WHOLT1 0674
|
||
PCPST 0294 PROPL 1CE5 READBF 0354 SPLIC1 1F03 WHOLT2 0698
|
||
PCPSTL 0295 PROPN 1CE1 READL 1A06 SPLICE 1EC9 WHOMSG 06D3
|
||
PCRLD1 048B PROPNX 1CEC READL2 1A51 SRCLOS 080E WHOTMS 06DB
|
||
PCRLF 04B4 PSHSTK 1D2C READL3 1A74 SRDFNM 02EB WRITER 0022
|
||
PCRLFD 0473 PSTUPS 0194 READR 0021 SRFAIL 0848 WRITES 0015
|
||
PCSTR 027E PTSIZE 1583 READS 0014 SRGDFN 0934 ZADD 183E
|
||
PCSTRL 027F PURSTP 21BA REMOVC 15C8 SRGFM1 08C8 ZCALL 18EF
|
||
PDL 0C77 PUT 197B REMOVE 15C2 SRGFN2 08ED ZCALL1 192E
|
||
PERMTB 2022 PUTB 1994 REMVC1 15F5 SRGFN3 092A ZCALL2 194C
|
||
PGBOT 21DD PUTBYT 1328 REMVC2 160D SRGFNA 0900 ZCALL3 195A
|
||
PGBUFP 21D7 PUTP 19A8 REST1 0B2F SRGFNB 091B ZCALL4 1968
|
||
PGTBD 0080 PUTP1 19AB RESTA 0AE0 SRGFNM 086C ZCHRC1 2147
|
||
PGTBL 0FC9 PUTP2 19BF RESTAR 075F SRMSG1 0A08 ZCHRC2 2154
|
||
PGTBLB 1049 PUTP2A 19D5 RESTOR 0A93 SRMSG2 0A44 ZCHRCS 213B
|
||
PGTBLF 1009 PUTVAL 132B RET0 1327 SRMSG3 0A64 ZCKLEN 001A
|
||
PGTFD 0040 PUTVL1 1348 RET1 1652 SRND 2187 ZCKSUM 001C
|
||
PGTOP 21DC PUTVLC 1331 RET2 1661 SRNDC 0029 ZCODEP 21D9
|
||
PNTTIM 073B PUTVLG 134D RETCUR 0019 SRSWPD 093F ZENDLD 0004
|
||
POPRET 0497 PUTVLL 1340 RETURN 1633 STAFLG 0BE4 ZER 0206
|
||
POPSTK 1D45 PUTVR1 1336 RFALSE 147F STAR3A 11D2 ZEROQ 1542
|
||
POSPS1 06CD PZFWRD 1F8E RND 1BEE START 0100 ZFWORD 0018
|
||
POSPS2 06C3 PZSTP0 1F50 RND1 1BF7 START1 10CC ZGLOBA 000C
|
||
POSPST 06B2 PZSTP1 1F52 RND2 1BF1 START2 115E ZID 0002
|
||
PREDB 1387 PZSTR 1F29 ROOMG 0010 START3 1173 ZMEMT 21B9
|
||
PREDB1 13AA PZSTR1 1F58 RSIBRK 1A6E START4 11F1 ZMOD 18B4
|
||
PREDB2 13D2 PZSTR2 1F61 RSTACK 14CC START5 120F ZNOP 14C0
|
||
PREDB3 13B5 PZSTRA 1F76 RTABP 21E9 STBYTF 21E0 ZOBJEC 000A
|
||
PREDB4 13E6 PZSTRC 1FF4 RTRMST 0131 TMCHK 057A ZPCFLG 21CE
|
||
PREDF 1371 PZSTRL 1F34 RTRUE 1476 TPA 0100 ZPCH 21A5
|
||
PREDLB 1396 PZSTRP 2007 RTRUE1 1479 TRUE 00FF ZPCL 21A6
|
||
PREDNB 1378 PZSTRS 1FEF SAVE 0770 TWODSK 01B5 ZPCOFF 21CA
|
||
PREDS 1380 PZSTRT 1FFE SAVE1 07EC UPPER 0921 ZPCPG 21CF
|
||
|
||
|
||
AVOCET SYSTEMS Z80 ASSEMBLER - VERSION 1.03C SERIAL #00112
|
||
|
||
SOURCE FILE NAME: ZORKCPM.ASM PAGE 88
|
||
---- SYMBOL TABLE ----
|
||
|
||
ZPCPNT 21CC ZRSTAR 14C9 ZSPLIT 0004 ZSTATB 0010 ZSWAPF 0001
|
||
ZPOP 1BE5 ZRSTOR 14C6 ZSTACK 0E09 ZSTBUI 21B0 ZTANDY 0008
|
||
ZPURBT 000E ZSAVE 14C3 ZSTAKC 21A8 ZSTBUO 21E3 ZTIMEF 0002
|
||
ZPUSH 1BDC ZSCRIP 0010 ZSTAKL 00E0 ZSTWRD 21E1 ZVERS 0000
|
||
ZQUIT 14DB ZSERNM 0012 ZSTAKP 0E07 ZSUB 1845 ZVOCAB 0008
|
||
ZREAD 19DA ZSET 1745 ZSTART 0006 ZSWAP 0001
|
||
|
||
***** NO ERRORS DETECTED *****
|