mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-02-10 02:00:22 +00:00
7196 lines
313 KiB
Plaintext
7196 lines
313 KiB
Plaintext
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- EQUATES PAGE 1
|
||
|
||
|
||
|
||
0000 ; --------------------------
|
||
0000 ; ZIP/6502 2.0 VERSION C
|
||
0000 ; Z-CODE INTERPRETER PROGRAM
|
||
0000 ; FOR COMMODORE 64
|
||
0000 ; --------------------------
|
||
|
||
0000 ; INFOCOM, INC.
|
||
0000 ; 55 WHEELER STREET
|
||
0000 ; CAMBRIDGE, MA 02136
|
||
|
||
0000 ; COMPANY PRIVATE -- NOT FOR DISTRIBUTION
|
||
|
||
0800 MSTART EQU $0800 ; START OF FREE PROGRAM RAM
|
||
0003 ZEROPG EQU $03 ; START OF FREE Z-PAGE RAM
|
||
008F ZPGTOP EQU $8F ; END OF FREE Z-PAGE RAM
|
||
|
||
0000 DEBUG EQU 0 ; ASSEMBLY FLAG FOR DEBUGGER
|
||
|
||
0000 ; -----------
|
||
0000 ; ERROR CODES
|
||
0000 ; -----------
|
||
|
||
0000 ; 00 -- INSUFFICIENT RAM
|
||
0000 ; 01 -- ILLEGAL X-OP
|
||
0000 ; 02 -- ILLEGAL 0-OP
|
||
0000 ; 03 -- ILLEGAL 1-OP
|
||
0000 ; 04 -- ILLEGAL 2-OP
|
||
0000 ; 05 -- Z-STACK UNDERFLOW
|
||
0000 ; 06 -- Z-STACK OVERFLOW
|
||
0000 ; 07 -- ILLEGAL PROPERTY LENGTH (GETP)
|
||
0000 ; 08 -- DIVISION BY ZERO
|
||
0000 ; 09 -- ILLEGAL ARGUMENT COUNT (EQUAL?)
|
||
0000 ; 10 -- ILLEGAL PROPERTY ID (PUTP)
|
||
0000 ; 11 -- ILLEGAL PROPERTY LENGTH (PUTP)
|
||
0000 ; 12 -- DISK ADDRESS OUT OF RANGE
|
||
0000 ; 13 -- PARSER OVERFLOW
|
||
0000 ; 14 -- DRIVE ACCESS
|
||
0000 ; 15 -- Z-STACK DESTROYED
|
||
|
||
INCLUD SHAKE.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- EQUATES PAGE 2
|
||
--- CBM64 FAST DISK HANDSHAKE ROUTINES ---
|
||
|
||
|
||
0000 ; ------------------
|
||
0000 ; 1541 DRIVE EQUATES
|
||
0000 ; ------------------
|
||
|
||
1800 PB EQU $1800
|
||
0000 JOBS EQU $00
|
||
0006 HDRS EQU $06
|
||
000A DATA EQU $0A
|
||
000B INDEX EQU $0B
|
||
|
||
0001 DATIN EQU $01
|
||
0002 DATOUT EQU $02
|
||
0004 CLKIN EQU $04
|
||
0008 CLKOUT EQU $08
|
||
0080 ATNIN EQU $80
|
||
|
||
0080 READ EQU $80
|
||
0090 WRITE EQU $90
|
||
00A0 VERIFY EQU $A0
|
||
00B0 SEEK EQU $B0
|
||
00B8 SECSEK EQU SEEK+8
|
||
00C0 BUMP EQU $C0
|
||
00D0 JUMPC EQU $D0
|
||
00E0 EXEC EQU $E0
|
||
|
||
0300 BUF1 EQU $0300
|
||
0400 BUF2 EQU $0400
|
||
0500 BUF3 EQU $0500
|
||
0600 BUF4 EQU $0600
|
||
0700 BUF5 EQU $0700
|
||
|
||
1C00 DSKCNT EQU $1C00 ; DISK CONTROLLER PORT ADDRESS
|
||
|
||
0500 ORG BUF3
|
||
|
||
0500 AD0018 INIT0: LDA PB
|
||
0503 29F5 AND #$FF-DATOUT-CLKOUT
|
||
0505 8D0018 STA PB
|
||
|
||
0508 203C05 JSR CLK0
|
||
|
||
050B AD001C CMDWT: LDA DSKCNT ; READ CONTROLLER
|
||
050E 29F7 AND #%11110111 ; CLEAR BIT 3
|
||
0510 8D001C STA DSKCNT ; TO SHUT OFF THE DAMNED LITTLE RED LIGHT
|
||
|
||
0513 204405 JSR BYTGET ; GET TRACK ID (1-35)
|
||
0516 AA TAX ; SAVE HERE
|
||
0517 F019 BEQ CMDEND ; IF ZERO
|
||
0519 C9FF CMP #$FF ; OR $FF,
|
||
051B F015 BEQ CMDEND ; DISENGAGE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- EQUATES PAGE 3
|
||
--- CBM64 FAST DISK HANDSHAKE ROUTINES ---
|
||
|
||
051D 8506 STA HDRS ; ELSE SET TRACK #
|
||
|
||
051F 204405 JSR BYTGET ; GET SECTOR #
|
||
0522 8507 STA HDRS+1 ; AND SET IT
|
||
|
||
0524 AD001C LDA DSKCNT ; TURN BACK ON
|
||
0527 0908 ORA #%00001000 ; THE STUPID LITTLE
|
||
0529 8D001C STA DSKCNT ; RED LIGHT
|
||
|
||
052C 20BD05 JSR RDFILE ; GET THE DATA
|
||
|
||
052F 4C0B05 JMP CMDWT ; WAIT FOR NEXT TRACK/SECTOR
|
||
|
||
0532 60 CMDEND: RTS ; EXIT HARD LOOP
|
||
|
||
0533 AD0018 DEBNC: LDA PB ; WAIT FOR SERIAL LINE
|
||
0536 CD0018 CMP PB ; TO SETTLE DOWN
|
||
0539 D0F8 BNE DEBNC
|
||
053B 60 RTS
|
||
|
||
053C 203305 CLK0: JSR DEBNC
|
||
053F 2904 AND #CLKIN
|
||
0541 D0F9 BNE CLK0
|
||
0543 60 RTS
|
||
|
||
0544 A980 BYTGET: LDA #$80
|
||
0546 850A STA DATA
|
||
|
||
0548 203305 GTBIT: JSR DEBNC
|
||
054B A8 TAY
|
||
054C 2904 AND #CLKIN
|
||
054E F0F8 BEQ GTBIT
|
||
0550 78 SEI
|
||
0551 98 TYA
|
||
0552 0902 ORA #DATOUT
|
||
0554 8D0018 STA PB
|
||
|
||
0557 203C05 JSR CLK0
|
||
055A AD0018 LDA PB
|
||
055D 29FD AND #$FF-DATOUT
|
||
055F 8D0018 STA PB
|
||
|
||
0562 203305 GTBO0: JSR DEBNC
|
||
0565 A8 TAY
|
||
0566 2904 AND #CLKIN
|
||
0568 F0F8 BEQ GTBO0
|
||
056A 203C05 JSR CLK0
|
||
056D 58 CLI
|
||
056E 98 TYA
|
||
056F 4A LSR A
|
||
0570 660A ROR DATA
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- EQUATES PAGE 4
|
||
--- CBM64 FAST DISK HANDSHAKE ROUTINES ---
|
||
|
||
0572 90D4 BCC GTBIT
|
||
|
||
0574 A50A LDA DATA
|
||
0576 60 RTS
|
||
|
||
0577 A208 BYTSND: LDX #8
|
||
0579 850A STA DATA
|
||
|
||
057B AD0018 BITSND: LDA PB
|
||
057E A8 TAY
|
||
057F 2904 AND #CLKIN
|
||
0581 F0F8 BEQ BITSND
|
||
0583 98 TYA
|
||
0584 0902 ORA #DATOUT
|
||
0586 8D0018 STA PB
|
||
0589 78 SEI
|
||
|
||
058A AD0018 BSND0: LDA PB
|
||
058D A8 TAY
|
||
058E 2904 AND #CLKIN
|
||
0590 D0F8 BNE BSND0
|
||
|
||
0592 98 BSND1: TYA
|
||
0593 29FD AND #$FF-DATOUT
|
||
0595 8D0018 STA PB
|
||
|
||
0598 AD0018 SPEED: LDA PB
|
||
059B A8 TAY
|
||
059C 2904 AND #CLKIN
|
||
059E F0F8 BEQ SPEED
|
||
|
||
05A0 98 TYA
|
||
05A1 460A LSR DATA
|
||
05A3 9002 BCC BSND2
|
||
05A5 0902 ORA #DATOUT
|
||
|
||
05A7 8D0018 BSND2: STA PB
|
||
|
||
05AA AD0018 BSND3: LDA PB
|
||
05AD A8 TAY
|
||
05AE 2904 AND #CLKIN
|
||
05B0 D0F8 BNE BSND3
|
||
05B2 98 TYA
|
||
05B3 29FD AND #$FF-DATOUT
|
||
05B5 8D0018 STA PB
|
||
|
||
05B8 CA DEX
|
||
05B9 D0DD BNE SPEED
|
||
05BB 58 CLI
|
||
05BC 60 RTS
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- EQUATES PAGE 5
|
||
--- CBM64 FAST DISK HANDSHAKE ROUTINES ---
|
||
|
||
05BD A980 RDFILE: LDA #READ
|
||
05BF 8500 STA JOBS
|
||
|
||
05C1 A500 TSTDO3: LDA JOBS
|
||
05C3 30FC BMI TSTDO3
|
||
|
||
05C5 A900 TSTDO5: LDA #0
|
||
05C7 850B STA INDEX
|
||
|
||
05C9 A40B TSTDO4: LDY INDEX
|
||
05CB B90003 LDA BUF1,Y
|
||
05CE 207705 JSR BYTSND
|
||
05D1 E60B INC INDEX
|
||
05D3 D0F4 BNE TSTDO4
|
||
05D5 60 RTS
|
||
|
||
05D6 ; FILL REMAINDER OF SECTOR
|
||
05D6 ; WITH JUNK
|
||
|
||
05D6 00000000 DB 0,0,0,0,0,0,0,0
|
||
05DE 00000000 DB 0,0,0,0,0,0,0,0
|
||
05E6 00000000 DB 0,0,0,0,0,0,0,0
|
||
05EE 00000000 DB 0,0,0,0,0,0,0,0
|
||
05F6 00000000 DB 0,0,0,0,0,0,0,0
|
||
05FE 0000 DB 0,0
|
||
|
||
END
|
||
INCLUD EQ.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- EQUATES PAGE 6
|
||
--- MEMORY ORGANIZATION ---
|
||
|
||
|
||
00FF TRUE EQU $FF
|
||
0000 FALSE EQU 0
|
||
0000 LO EQU 0
|
||
0001 HI EQU 1
|
||
|
||
0800 IOBUFF EQU MSTART ; 256-BYTE DISK BUFFER
|
||
0900 ZSTAKL EQU MSTART+$100 ; Z-STACK LSBS
|
||
0A00 ZSTAKH EQU MSTART+$200 ; Z-STACK MSBS
|
||
0B00 PTABL EQU MSTART+$300 ; PAGING TABLE LSBS ($A0 BYTES)
|
||
0BA0 PTABH EQU MSTART+$3A0 ; PAGING TABLE MSBS ($A0 BYTES)
|
||
0C50 LRUMAP EQU MSTART+$450 ; TIMESTAMP MAP ($A0 BYTES) (BM 11/24/84)
|
||
0D00 LOCALS EQU MSTART+$500 ; LOCAL VARIABLE STORAGE (32 BYTES)
|
||
0D20 BUFSAV EQU MSTART+$520 ; I/O AUX BUFFER (80 BYTES)
|
||
|
||
0E00 ZIP EQU MSTART+$600 ; START OF EXECUTABLE CODE
|
||
2A00 ZBEGIN EQU ZIP+$1C00 ; START OF Z-CODE (ASSUME 7K ZIP)
|
||
|
||
0600 ; ---------------------
|
||
0600 ; Z-CODE HEADER OFFSETS
|
||
0600 ; ---------------------
|
||
|
||
0000 ZVERS EQU 0 ; VERSION BYTE
|
||
0001 ZMODE EQU 1 ; MODE SELECT BYTE
|
||
0002 ZID EQU 2 ; GAME ID WORD
|
||
0004 ZENDLD EQU 4 ; START OF NON-PRELOADED Z-CODE
|
||
0006 ZGO EQU 6 ; 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" Z-CODE
|
||
0010 ZSCRIP EQU 16 ; FLAG WORD
|
||
0012 ZSERIA EQU 18 ; 3-WORD ASCII SERIAL NUMBER
|
||
0018 ZFWORD EQU 24 ; START OF FWORDS TABLE
|
||
001A ZLENTH EQU 26 ; LENGTH OF Z-PROGRAM IN WORDS
|
||
001C ZCHKSM EQU 28 ; Z-CODE CHECKSUM WORD
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- EQUATES PAGE 7
|
||
--- ZIP Z-PAGE VARIABLES ---
|
||
|
||
|
||
0003 OPCODE EQU ZEROPG ; (BYTE) CURRENT OPCODE
|
||
0004 NARGS EQU OPCODE+1 ; (BYTE) # ARGUMENTS
|
||
0005 ARG1 EQU OPCODE+2 ; (WORD) ARGUMENT #1
|
||
0007 ARG2 EQU OPCODE+4 ; (WORD) ARGUMENT #2
|
||
0009 ARG3 EQU OPCODE+6 ; (WORD) ARGUMENT #3
|
||
000B ARG4 EQU OPCODE+8 ; (WORD) ARGUMENT #4
|
||
000D ABYTE EQU OPCODE+10 ; (BYTE) X-OP ARGUMENT BYTE
|
||
000E ADEX EQU OPCODE+11 ; (BYTE) X-OP ARGUMENT INDEX
|
||
|
||
000F VALUE EQU OPCODE+12 ; (WORD) VALUE RETURN REGISTER
|
||
0011 I EQU VALUE+2 ; (WORD) GEN-PURPOSE REGISTER #1
|
||
0013 J EQU VALUE+4 ; (WORD) GEN-PURPOSE REGISTER #2
|
||
0015 K EQU VALUE+6 ; (WORD) GEN-PURPOSE REGISTER #3
|
||
|
||
0017 ZSP EQU VALUE+8 ; (BYTE) Z-STACK POINTER
|
||
0018 OLDZSP EQU ZSP+1 ; (BYTE) OLD Z-STACK POINTER
|
||
|
||
0019 ZPC EQU ZSP+2 ; (3 BYTES) ZIP PROGRAM COUNTER
|
||
0019 ZPCL EQU ZPC ; (BYTE) LOW 8 BITS OF [ZPC]
|
||
001A ZPCM EQU ZPC+1 ; (BYTE) MIDDLE 8 BITS OF [ZPC]
|
||
001B ZPCH EQU ZPC+2 ; (BYTE) HIGH BIT OF [ZPC]
|
||
001C ZPCFLG EQU ZPC+3 ; (BYTE) FLAG: "TRUE" IF [ZPCPNT] VALID
|
||
001D ZPCPNT EQU ZPC+4 ; (WORD) ABS POINTER TO CURRENT Z-PAGE
|
||
|
||
001F MPC EQU ZPC+6 ; (3 BYTES) MEMORY PROGRAM COUNTER
|
||
001F MPCL EQU MPC ; (BYTE) LOW 8 BITS OF [MPC]
|
||
0020 MPCM EQU MPC+1 ; (BYTE) MIDDLE 8 BITS OF [MPC]
|
||
0021 MPCH EQU MPC+2 ; (BYTE) HIGH BIT OF [MPC]
|
||
0022 MPCFLG EQU MPC+3 ; (BYTE) FLAG: "TRUE" IF [MPCPNT] VALID
|
||
0023 MPCPNT EQU MPC+4 ; (WORD) ABS POINTER TO CURRENT M-PAGE
|
||
|
||
0025 LRU EQU MPC+6 ; (BYTE) PAGING INDEX
|
||
0026 ZCODE EQU LRU+1 ; (BYTE) 1ST ABSOLUTE PAGE OF PRELOAD
|
||
0027 ZPURE EQU LRU+2 ; (BYTE) 1ST VIRTUAL PAGE OF "PURE" Z-CODE
|
||
0028 PAGE0 EQU LRU+3 ; (BYTE) 1ST PAGE OF ACTUAL SWAPPING SPACE
|
||
0029 PMAX EQU LRU+4 ; (BYTE) MAXIMUM # OF SWAPPING PAGES
|
||
002A ZPAGE EQU LRU+5 ; (BYTE) CURRENT SWAPPING PAGE
|
||
002B TARGET EQU LRU+6 ; (WORD) TARGET PAGE FOR SWAPPING
|
||
002D STAMP EQU LRU+8 ; (BYTE) CURRENT TIMESTAMP (BM 11/24/84)
|
||
002E SWAP EQU LRU+9 ; (BYTE) EARLIEST PAGE (BM 11/24/84)
|
||
|
||
002F GLOBAL EQU LRU+10 ; (WORD) GLOBAL VARIABLE POINTER
|
||
0031 VOCAB EQU GLOBAL+2 ; (WORD) VOCAB TABLE POINTER
|
||
0033 FWORDS EQU GLOBAL+4 ; (WORD) F-WORDS TABLE POINTER
|
||
0035 OBJTAB EQU GLOBAL+6 ; (WORD) OBJECT TABLE POINTER
|
||
|
||
0600 ; Z-STRING MANIPULATION VARIABLES
|
||
|
||
0037 IN EQU GLOBAL+8 ; (6 BYTES) INPUT BUFFER
|
||
003D OUT EQU IN+6 ; (6 BYTES) OUTPUT BUFFER
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- EQUATES PAGE 8
|
||
--- ZIP Z-PAGE VARIABLES ---
|
||
|
||
|
||
0043 SOURCE EQU OUT+6 ; (BYTE) SOURCE BUFFER POINTER
|
||
0044 RESULT EQU SOURCE+1 ; (BYTE) RESULT TABLE POINTER
|
||
0045 LINLEN EQU SOURCE+2 ; (BYTE) LENGTH OF CURRENT LINE
|
||
0046 WRDLEN EQU SOURCE+3 ; (BYTE) LENGTH OF CURRENT WORD
|
||
0047 ENTRY EQU SOURCE+4 ; (WORD) ADDR OF CURRENT RESULT ENTRY
|
||
0049 NENTS EQU SOURCE+6 ; (WORD) # ENTRIES IN VOCAB TABLE
|
||
004B ESIZE EQU SOURCE+8 ; (BYTE) SIZE OF VOCAB TABLE ENTRIES
|
||
004C PSET EQU SOURCE+9 ; (BYTE) PERMANENT CHARSET
|
||
004D TSET EQU SOURCE+10 ; (BYTE) TEMPORARY CHARSET
|
||
004E ZCHAR EQU SOURCE+11 ; (BYTE) CURRENT Z-CHAR
|
||
004F OFFSET EQU SOURCE+12 ; (BYTE) F-WORD TABLE OFFSET
|
||
0050 ZFLAG EQU SOURCE+13 ; (BYTE) Z-WORD ACCESS FLAG
|
||
0051 ZWORD EQU SOURCE+14 ; (WORD) CURRENT Z-WORD
|
||
0053 CONCNT EQU SOURCE+16 ; (BYTE) Z-STRING SOURCE COUNTER
|
||
0054 CONIN EQU SOURCE+17 ; (BYTE) CONVERSION SOURCE INDEX
|
||
0055 CONOUT EQU SOURCE+18 ; (BYTE) CONVERSION DEST INDEX
|
||
|
||
0056 QUOT EQU SOURCE+19 ; (WORD) QUOTIENT FOR DIVISION
|
||
0058 REMAIN EQU QUOT+2 ; (WORD) REMAINDER FOR DIVISION
|
||
005A MTEMP EQU QUOT+4 ; (WORD) MATH TEMPORARY REGISTER
|
||
005C QSIGN EQU QUOT+6 ; (BYTE) SIGN OF QUOTIENT
|
||
005D RSIGN EQU QUOT+7 ; (BYTE) SIGN OF REMAINDER
|
||
005E DIGITS EQU QUOT+8 ; (BYTE) DIGIT COUNT FOR "PRINTN"
|
||
|
||
005F TIMEFL EQU QUOT+9 ; (BYTE) "TRUE" IF TIME MODE
|
||
0060 LENGTH EQU TIMEFL+1 ; (BYTE) LENGTH OF LINE IN [LINBUF]
|
||
0061 OLDLEN EQU TIMEFL+2 ; (BYTE) OLD LINE LENGTH
|
||
0062 SCRIPT EQU TIMEFL+3 ; (BYTE) SCRIPT ENABLE FLAG
|
||
0063 OLDX EQU TIMEFL+4 ; (BYTE) OLD CURSOR X
|
||
0064 OLDY EQU TIMEFL+5 ; (BYTE) OLD CURSOR Y
|
||
0065 LINCNT EQU TIMEFL+6 ; (BYTE) LINE COUNTER
|
||
0066 LMAX EQU TIMEFL+7 ; (BYTE) MAX # LINES/SCREEN
|
||
|
||
0067 IOCHAR EQU TIMEFL+8 ; (BYTE) CHARACTER BUFFER
|
||
0068 SLINE EQU IOCHAR+1 ; (BYTE) BORDERLINE FOR SPLIT
|
||
0069 SPSTAT EQU IOCHAR+2 ; (BYTE) SPLIT SCREEN STATUS FLAG
|
||
006A LFROM EQU IOCHAR+3 ; (WORD) "FROM" LINE ADDRESS
|
||
006C LTO EQU IOCHAR+5 ; (WORD) "TO" LINE ADDRESS
|
||
006E PSTAT EQU IOCHAR+7 ; (BYTE) PRINTER STATUS FLAG
|
||
006F PRLEN EQU IOCHAR+8 ; (BYTE) SCRIPT LINE LENGTH
|
||
|
||
0070 DBLOCK EQU IOCHAR+9 ; (WORD) Z-BLOCK TO READ
|
||
0072 DBUFF EQU DBLOCK+2 ; (WORD) RAM PAGE TO ACCESS (LSB = 0)
|
||
0074 TRACK EQU DBLOCK+4 ; (BYTE) TARGET TRACK
|
||
0075 SECTOR EQU DBLOCK+5 ; (BYTE) TARGET SECTOR
|
||
0076 GPOSIT EQU DBLOCK+6 ; (BYTE) DEFAULT SAVE POSITION
|
||
0077 GDRIVE EQU DBLOCK+7 ; (BYTE) DEFAULT SAVE DRIVE
|
||
0078 TPOSIT EQU DBLOCK+8 ; (BYTE) TEMP SAVE POSITION
|
||
0079 TDRIVE EQU DBLOCK+9 ; (BYTE) TEMP SAVE DRIVE
|
||
007A DRIVE EQU DBLOCK+10 ; (BYTE) CURRENT DRIVE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- EQUATES PAGE 9
|
||
--- ZIP Z-PAGE VARIABLES ---
|
||
|
||
|
||
007B BLINK EQU DBLOCK+11 ; (WORD) CURSOR BLINK TIMER
|
||
|
||
007D DVD EQU DBLOCK+13 ; (WORD) DISK DIVIDEND
|
||
007F DSOR EQU DBLOCK+15 ; (WORD) DISK DIVISOR
|
||
0081 DTEMP EQU DBLOCK+17 ; (WORD) DISK TEMP VARIABLE
|
||
|
||
END
|
||
|
||
INCLUD HARDEQ.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT INIT PAGE 10
|
||
--- HARDWARE EQUATES: CBM64 ---
|
||
|
||
|
||
0600 ; ---------
|
||
0600 ; CONSTANTS
|
||
0600 ; ---------
|
||
|
||
0027 XSIZE EQU 39 ; X-SIZE OF SCREEN
|
||
0018 YSIZE EQU 24 ; Y-SIZE OF SCREEN
|
||
|
||
000D EOL EQU $0D ; EOL CHAR
|
||
0020 SPACE EQU $20 ; SPACE CHAR
|
||
0014 BACKSP EQU $14 ; BACKSPACE
|
||
|
||
0600 ; ---------
|
||
0600 ; ZERO-PAGE
|
||
0600 ; ---------
|
||
|
||
0000 D6510 EQU $00 ; 6510 DATA DIRECTION REGISTER
|
||
0001 R6510 EQU $01 ; 6510 I/O PORT
|
||
0002 FAST EQU $02 ; FAST-READ AVAILABLE FLAG
|
||
0091 STKEY EQU $91 ; STOP KEY FLAG
|
||
009D MSGFLG EQU $9D ; KERNAL MESSAGE CONTROL FLAG
|
||
00A2 TIME EQU $A2 ; SYSTEM JIFFY TIMER
|
||
00C5 LSTX EQU $C5 ; LAST KEY PRESSED
|
||
00C6 NDX EQU $C6 ; # CHARS IN KEYBOARD BUFFER
|
||
00C7 RVS EQU $C7 ; REVERSE CHARACTER FLAG
|
||
00CB SFDX EQU $CB ; CURRENT KEYPRESS
|
||
00CC BLNSW EQU $CC ; CURSOR BLINK SWITCH
|
||
00D3 PNTR EQU $D3 ; CURSOR COLUMN IN LOGICAL LINE
|
||
00D6 TBLX EQU $D6 ; CURRENT CURSOR ROW
|
||
00D9 LDTB1 EQU $D9 ; 25-BYTE LINE LINK TABLE
|
||
00F5 KEYTAB EQU $F5 ; KEYBOARD DECODE TABLE VECTOR
|
||
|
||
00FB FDATA EQU $FB ; FAST-READ DATA BUFFER
|
||
00FC FINDEX EQU $FC ; FAST-READ BUFFER INDEX
|
||
00FD FASTEN EQU $FD ; FAST-READ ENABLED FLAG
|
||
|
||
0600 ; -----------
|
||
0600 ; PAGES 2 & 3
|
||
0600 ; -----------
|
||
|
||
0200 LBUFF EQU $0200 ; 89-BYTE LINE BUFFER
|
||
0277 KEYD EQU $0277 ; KEYBOARD QUEUE
|
||
0286 COLOR EQU $0286 ; FOREGROUND COLOR FOR TEXT
|
||
0288 HIBASE EQU $0288 ; TOP PAGE OF SCREEN RAM
|
||
0289 XMAX EQU $0289 ; MAXIMUM KEYBOARD QUEUE SIZE
|
||
028A RPTFLG EQU $028A ; KEY REPEAT FLAG
|
||
028D SHFLAG EQU $028D ; SHIFT KEY FLAG
|
||
028F KEYLOG EQU $028F ; VECTOR TO KEY-TABLE SETUP ROUTINE
|
||
0291 MODE EQU $0291 ; CHARSET MODE SWITCH
|
||
0314 CINV EQU $0314 ; SYSTEM 60HZ IRQ VECTOR
|
||
0316 CBINV EQU $0316 ; BRK INSTRUCTION VECTOR
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT INIT PAGE 11
|
||
--- HARDWARE EQUATES: CBM64 ---
|
||
|
||
0318 NMINV EQU $0318 ; NMI INTERRUPT VECTOR
|
||
0340 SPRT13 EQU $0340 ; SPRITE #13 DATA
|
||
0380 SPRT14 EQU $0380 ; SPRITE #14 DATA
|
||
03C0 SPRT15 EQU $03C0 ; SPRITE #15 DATA
|
||
|
||
0340 CURSOR EQU SPRT13 ; CURSOR RAM
|
||
0400 SCREEN EQU $0400 ; SCREEN RAM
|
||
D800 COLRAM EQU $D800 ; COLOR RAM
|
||
07F8 SPT0 EQU $07F8 ; SPRITE #0 PNTR
|
||
07F9 SPT1 EQU $07F9 ; SPRITE #1 PNTR
|
||
07FA SPT2 EQU $07FA ; SPRITE #2 PNTR
|
||
07FB SPT3 EQU $07FB ; SPRITE #3 PNTR
|
||
07FC SPT4 EQU $07FC ; SPRITE #4 PNTR
|
||
07FD SPT5 EQU $07FD ; SPRITE #5 PNTR
|
||
07FE SPT6 EQU $07FE ; SPRITE #6 PNTR
|
||
07FF SPT7 EQU $07FF ; SPRITE #7 PNTR
|
||
|
||
0600 ; ------
|
||
0600 ; VIC-II
|
||
0600 ; ------
|
||
|
||
0600 ; SPRITE POSITION REGISTERS
|
||
|
||
D000 SP0X EQU $D000 ; SPRITE #0 X-POS
|
||
D001 SP0Y EQU $D001 ; SPRITE #0 Y-POS
|
||
D002 SP1X EQU $D002 ; SPRITE #1 X-POS
|
||
D003 SP1Y EQU $D003 ; SPRITE #1 Y-POS
|
||
D004 SP2X EQU $D004 ; SPRITE #2 X-POS
|
||
D005 SP2Y EQU $D005 ; SPRITE #2 Y-POS
|
||
D006 SP3X EQU $D006 ; SPRITE #3 X-POS
|
||
D007 SP3Y EQU $D007 ; SPRITE #3 Y-POS
|
||
D008 SP4X EQU $D008 ; SPRITE #4 X-POS
|
||
D009 SP4Y EQU $D009 ; SPRITE #4 Y-POS
|
||
D00A SP5X EQU $D00A ; SPRITE #5 X-POS
|
||
D00B SP5Y EQU $D00B ; SPRITE #5 Y-POS
|
||
D00C SP6X EQU $D00C ; SPRITE #6 X-POS
|
||
D00D SP6Y EQU $D00D ; SPRITE #6 Y-POS
|
||
D00E SP7X EQU $D00E ; SPRITE #7 X-POS
|
||
D00F SP7Y EQU $D00F ; SPRITE #7 Y-POS
|
||
D010 MSIGX EQU $D010 ; HIGH BITS OF SPRITE X-POSITIONS
|
||
|
||
0600 ; VARIOUS CONTROL REGISTERS
|
||
|
||
D011 SCROLY EQU $D011 ; Y-SCROLL & VIDEO CONTROL
|
||
D012 RASTER EQU $D012 ; RASTER COMPARE
|
||
D015 SPENA EQU $D015 ; SPRITE ENABLE
|
||
D016 SCROLX EQU $D016 ; X-SCROLL & VIDEO CONTROL
|
||
D017 YXPAND EQU $D017 ; SPRITE Y-EXPANSION
|
||
D018 VMCSB EQU $D018 ; MEMORY CONTROL
|
||
D019 VICIRQ EQU $D019 ; CHIP INTERRUPT FLAGS
|
||
D01A IRQMSK EQU $D01A ; IRQ MASKS
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT INIT PAGE 12
|
||
--- HARDWARE EQUATES: CBM64 ---
|
||
|
||
D01B SPBGPR EQU $D01B ; SPRITE/FOREGROUND PRIORITY
|
||
D01C SPMC EQU $D01C ; MULTICOLOR SPRITE CONTROL
|
||
D01D XXPAND EQU $D01D ; SPRITE X-EXPANSION
|
||
|
||
0600 ; COLOR REGISTERS
|
||
|
||
D020 EXTCOL EQU $D020 ; BORDER COLOR
|
||
D021 BGCOLO EQU $D021 ; BACKGROUND COLOR
|
||
D027 SP0COL EQU $D027 ; SPRITE #0 COLOR
|
||
D028 SP1COL EQU $D028 ; SPRITE #1 COLOR
|
||
D029 SP2COL EQU $D029 ; SPRITE #2 COLOR
|
||
D02A SP3COL EQU $D02A ; SPRITE #3 COLOR
|
||
D02B SP4COL EQU $D02B ; SPRITE #4 COLOR
|
||
D02C SP5COL EQU $D02C ; SPRITE #5 COLOR
|
||
D02D SP6COL EQU $D02D ; SPRITE #6 COLOR
|
||
D02E SP7COL EQU $D02E ; SPRITE #7 COLOR
|
||
|
||
0600 ; ---
|
||
0600 ; SID
|
||
0600 ; ---
|
||
|
||
0600 ; VOICE #1 REGISTERS
|
||
|
||
D400 FRELO1 EQU $D400 ; FREQ
|
||
D401 FREHI1 EQU $D401 ; FREQ HIGH BIT
|
||
D402 PWLO1 EQU $D402 ; PULSE WIDTH
|
||
D403 PWHI1 EQU $D403 ; PULSE WIDTH HIGH NIBBLE
|
||
D404 VCREG1 EQU $D404 ; CONTROL
|
||
D405 ATDCY1 EQU $D405 ; ATTACK/DECAY
|
||
D406 SUREL1 EQU $D406 ; SUSTAIN/RELEASE
|
||
|
||
0600 ; VOICE #2 REGISTERS
|
||
|
||
D407 FRELO2 EQU $D407 ; FREQ
|
||
D408 FREHI2 EQU $D408 ; FREQ HIGH BIT
|
||
D409 PWLO2 EQU $D409 ; PULSE WIDTH
|
||
D40A PWHI2 EQU $D40A ; PULSE WIDTH HIGH NIBBLE
|
||
D40B VCREG2 EQU $D40B ; CONTROL
|
||
D40C ATDCY2 EQU $D40C ; ATTACK/DECAY
|
||
D40D SUREL2 EQU $D40D ; SUSTAIN/RELEASE
|
||
|
||
0600 ; VOICE #3 REGISTERS
|
||
|
||
D40E FRELO3 EQU $D40E ; FREQ
|
||
D40F FREHI3 EQU $D40F ; FREQ HIGH BIT
|
||
D410 PWLO3 EQU $D410 ; PULSE WIDTH
|
||
D411 PWHI3 EQU $D411 ; PULSE WIDTH HIGH NIBBLE
|
||
D412 VCREG3 EQU $D412 ; VOICE CONTROL
|
||
D413 ATDCY3 EQU $D413 ; ATTACK/DECAY
|
||
D414 SUREL3 EQU $D414 ; SUSTAIN/RELEASE
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT INIT PAGE 13
|
||
--- HARDWARE EQUATES: CBM64 ---
|
||
|
||
0600 ; MISCELLANEOUS REGISTERS
|
||
|
||
D415 CUTLO EQU $D415 ; FILTER CUTOFF, LOW BITS
|
||
D416 CUTHI EQU $D416 ; FILTER CUTOFF, HIGH BYTE
|
||
D417 RESON EQU $D417 ; RESONANCE CONTROL
|
||
D418 SIGVOL EQU $D418 ; VOLUME/FILTER CONTROL
|
||
D41B RAND EQU $D41B ; RANDOM NUMBER
|
||
DD00 CI2PRA EQU $DD00 ; DATA PORT A
|
||
|
||
0600 ; -------------------
|
||
0600 ; KERNAL JUMP VECTORS
|
||
0600 ; -------------------
|
||
|
||
FFC6 CHKIN EQU $FFC6 ; OPEN CHANNEL FOR INPUT
|
||
FFC9 CHKOUT EQU $FFC9 ; OPEN CHANNEL FOR OUTPUT
|
||
FFCF CHRIN EQU $FFCF ; INPUT CHARACTER FROM CHANNEL
|
||
FFD2 CHROUT EQU $FFD2 ; OUTPUT CHARACTER TO CHANNEL
|
||
FF81 CINT EQU $FF81 ; INIT SCREEN EDITOR
|
||
FFE7 CLALL EQU $FFE7 ; CLOSE ALL CHANNELS & FILES
|
||
FFC3 CLOSE EQU $FFC3 ; CLOSE A FILE
|
||
FFCC CLRCHN EQU $FFCC ; CLEAR CHANNEL
|
||
FFE4 GETIN EQU $FFE4 ; GET CHAR FROM KEYBOARD QUEUE
|
||
FF84 IOINIT EQU $FF84 ; INIT I/O
|
||
FFC0 OPEN EQU $FFC0 ; OPEN A FILE
|
||
FFF0 PLOT EQU $FFF0 ; READ/SET CURSOR POSITION
|
||
FF87 RAMTAS EQU $FF87 ; INIT RAM
|
||
FFB7 READST EQU $FFB7 ; READ I/O STATUS
|
||
FF9F SCNKEY EQU $FF9F ; SCAN KEYBOARD
|
||
FFBA SETLFS EQU $FFBA ; SET FILE ATTRIBUTES
|
||
FF90 SETMSG EQU $FF90 ; SET KERNAL MESSAGES
|
||
FFBD SETNAM EQU $FFBD ; SET FILENAME
|
||
|
||
END
|
||
INCLUD COLD.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT INIT PAGE 14
|
||
--- MACHINE COLDSTART: CBM64 ---
|
||
|
||
|
||
0E00 ORG ZIP
|
||
|
||
0E00 ; ---------
|
||
0E00 ; COLDSTART
|
||
0E00 ; ---------
|
||
|
||
0E00 A501 COLD: LDA R6510
|
||
0E02 29FE AND #%11111110 ; SWITCH OUT BASIC ROM
|
||
0E04 8501 STA R6510 ; KERNAL ROM & I/O ENABLED
|
||
|
||
0E06 A901 LDA #1 ; WHITE
|
||
0E08 8D8602 STA COLOR ; TEXT
|
||
0E0B A90C LDA #12 ; GRAY
|
||
0E0D 8D20D0 STA EXTCOL ; BORDER
|
||
0E10 8D21D0 STA BGCOLO ; AND BACKGROUND
|
||
|
||
0E13 A90E LDA #$0E
|
||
0E15 20D2FF JSR CHROUT ; USE UPPER/LOWER CHARS
|
||
0E18 A980 LDA #$80 ; PROHIBIT FURTHER
|
||
0E1A 8D9102 STA MODE ; CHARSET CHANGES
|
||
|
||
0E1D A900 LDA #0
|
||
0E1F 859D STA MSGFLG ; DISABLE KERNAL MESSAGES
|
||
0E21 8D0322 STA SFLAG ; NO PREVIOUS SCRIPTING (BM 5/14/85)
|
||
|
||
0E24 ; INITIALIZE THE SOUND SYSTEM
|
||
|
||
0E24 A21C LDX #$1C ; CLEAR
|
||
0E26 A900 LDA #0 ; ALL
|
||
0E28 9D00D4 CLD0: STA FRELO1,X ; SID REGISTERS
|
||
0E2B CA DEX
|
||
0E2C 10FA BPL CLD0
|
||
|
||
0E2E A902 LDA #2 ; SET VOICE #1
|
||
0E30 8D02D4 STA PWLO1 ; PULSE WIDTH
|
||
0E33 A908 LDA #8 ; FOR A
|
||
0E35 8D03D4 STA PWHI1 ; 50% DUTY CYCLE
|
||
|
||
0E38 A980 LDA #%10000000 ; DISABLE OUTPUT
|
||
0E3A 8D18D4 STA SIGVOL ; FROM VOICE #3
|
||
|
||
0E3D A9EE LDA #$EE
|
||
0E3F 8D0ED4 STA FRELO3 ; SET VOICE #3 TO
|
||
0E42 8D0FD4 STA FREHI3 ; AN AMUSING FREQUENCY
|
||
|
||
0E45 A980 LDA #%10000000 ; SPECIFY NOISY WAVEFORM
|
||
0E47 8D12D4 STA VCREG3 ; FOR RANDOMNESS
|
||
|
||
0E4A ; INITIALIZE THE SPRITE CURSOR
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT INIT PAGE 15
|
||
--- MACHINE COLDSTART: CBM64 ---
|
||
|
||
0E4A A23F LDX #63 ; CLEAR SPRITE #13 RAM
|
||
0E4C A900 LDA #0
|
||
0E4E 9D4003 CN0: STA CURSOR,X
|
||
0E51 CA DEX
|
||
0E52 10FA BPL CN0
|
||
|
||
0E54 8D1DD0 STA XXPAND ; NORMAL HORIZONTAL
|
||
0E57 8D17D0 STA YXPAND ; AND VERTICAL SPRITE SIZE
|
||
0E5A 8D1BD0 STA SPBGPR ; MAXIMUM SPRITE PRIORITY
|
||
0E5D 8D1CD0 STA SPMC ; HI-RES SPRITES
|
||
0E60 8D27D0 STA SP0COL ; BLACK CURSOR
|
||
|
||
0E63 4C7F0E JMP WARM1
|
||
|
||
0E66 ; ---------------
|
||
0E66 ; WARMSTART ENTRY
|
||
0E66 ; ---------------
|
||
|
||
0E66 54686520 SLOAD: DB "The story is loading ..."
|
||
0E7E 0D DB EOL
|
||
0019 SLOADL EQU $-SLOAD
|
||
|
||
0E7F D8 WARM1: CLD
|
||
0E80 A2FF LDX #$FF
|
||
0E82 9A TXS ; RESET MACHINE STACK
|
||
0E83 20E7FF JSR CLALL ; CLOSE EVERYTHING
|
||
|
||
0E86 200E23 JSR CLS ; CLEAR SCREEN, ETC.
|
||
|
||
0E89 A008 LDY #8 ; POSITION "STORY LOADING" MESSAGE
|
||
0E8B A20B LDX #11 ; AT (8,11)
|
||
0E8D 18 CLC
|
||
0E8E 20F0FF JSR PLOT
|
||
|
||
0E91 A266 LDX #LOW SLOAD
|
||
0E93 A90E LDA #HIGH SLOAD
|
||
0E95 A019 LDY #SLOADL
|
||
0E97 20F021 JSR DLINE ; "THE STORY IS LOADING ..."
|
||
|
||
0E9A A908 LDA #8 ; MAKE BOOT DRIVE
|
||
0E9C 209D27 JSR DOPEN ; AND OPEN IT
|
||
|
||
0E9F A502 LDA FAST ; FAST DISK?
|
||
0EA1 F003 BEQ WARM2 ; NO, CONTINUE
|
||
0EA3 20C128 JSR FINIT ; ELSE INIT FAST DISK
|
||
|
||
0EA6 ; FALL THROUGH TO ZIP WARMSTART AT "WARM2"
|
||
|
||
END
|
||
|
||
INCLUD WARM.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 16
|
||
--- WARMSTART ROUTINE ---
|
||
|
||
|
||
0EA6 ; -------------
|
||
0EA6 ; ZIP WARMSTART
|
||
0EA6 ; -------------
|
||
|
||
0EA6 A900 WARM2: LDA #0 ; CLEAR ALL Z-PAGE VARIABLES
|
||
0EA8 A203 LDX #ZEROPG
|
||
0EAA 9500 ST0: STA 0,X
|
||
0EAC E8 INX
|
||
0EAD E08F CPX #ZPGTOP
|
||
0EAF 90F9 BCC ST0
|
||
|
||
0EB1 ; INIT THE PAGING TABLES
|
||
|
||
0EB1 AA TAX ; = 0
|
||
0EB2 A9FF LDA #$FF
|
||
0EB4 9D000B ST1A: STA PTABL,X
|
||
0EB7 9DA00B STA PTABH,X
|
||
0EBA E8 INX
|
||
0EBB E0A0 CPX #$A0
|
||
0EBD 90F5 BCC ST1A
|
||
|
||
0EBF ; INIT THE TIMESTAMP MAP (BM 11/24/84)\
|
||
|
||
0EBF A900 LDA #0
|
||
0EC1 AA TAX
|
||
0EC2 9D500C ST1B: STA LRUMAP,X
|
||
0EC5 E8 INX
|
||
0EC6 E0A0 CPX #$A0
|
||
0EC8 90F8 BCC ST1B
|
||
|
||
0ECA E617 INC ZSP ; INIT Z-STACK POINTERS
|
||
0ECC E618 INC OLDZSP ; TO "1"
|
||
0ECE E62D INC STAMP ; INIT TIMESTAMP (BM 11/24/84)
|
||
|
||
0ED0 ; GRAB THE FIRST BLOCK OF PRELOAD
|
||
|
||
0ED0 A92A LDA #HIGH ZBEGIN ; MSB OF PRELOAD START ADDRESS
|
||
0ED2 8526 STA ZCODE ; FREEZE IT HERE
|
||
0ED4 8573 STA DBUFF+HI ; LSB IS ALWAYS ZERO
|
||
0ED6 208A23 JSR GETDSK ; [DBLOCK] SET TO Z-BLOCK 0
|
||
|
||
0ED9 ; EXTRACT GAME DATA FROM Z-CODE HEADER
|
||
|
||
0ED9 AE042A LDX ZBEGIN+ZENDLD ; MSB OF ENDLOAD POINTER
|
||
0EDC E8 INX ; ADD 1 TO GET
|
||
0EDD 8627 STX ZPURE ; 1ST "PURE" PAGE OF Z-CODE
|
||
|
||
0EDF 8A TXA ; ADD START PAGE OF PRELOAD
|
||
0EE0 18 CLC ; TO CALC ABSOLUTE START ADDRESS
|
||
0EE1 6526 ADC ZCODE ; OF PAGING SPACE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 17
|
||
--- WARMSTART ROUTINE ---
|
||
|
||
0EE3 8528 STA PAGE0
|
||
|
||
0EE5 203B1E JSR MEMTOP ; RETURNS TOP RAM PAGE IN [A]
|
||
0EE8 38 SEC
|
||
0EE9 E528 SBC PAGE0 ; SUBTRACT ADDRESS OF PAGING SPACE
|
||
0EEB F002 BEQ NORAM
|
||
0EED B005 BCS SETNP ; ERROR IF NOT ENOUGH RAM
|
||
|
||
0EEF ; *** ERROR #0 -- INSUFFICIENT RAM ***
|
||
|
||
0EEF A900 NORAM: LDA #0
|
||
0EF1 4CC41D JMP ZERROR
|
||
|
||
0EF4 C9A0 SETNP: CMP #$A0 ; DON'T ALLOW MORE THAN $A0 PAGES
|
||
0EF6 9002 BCC SETA0
|
||
0EF8 A9A0 LDA #$A0
|
||
0EFA 8529 SETA0: STA PMAX ; SET # SWAPPING PAGES
|
||
|
||
0EFC AD012A LDA ZBEGIN+ZMODE
|
||
0EFF 0920 ORA #%00100000 ; ENABLE SPLIT-SCREEN
|
||
0F01 8D012A STA ZBEGIN+ZMODE
|
||
|
||
0F04 2902 AND #%00000010 ; ISOLATE STATUS-FORMAT BIT
|
||
0F06 855F STA TIMEFL ; 0=SCORE, NZ=TIME
|
||
|
||
0F08 AD0C2A LDA ZBEGIN+ZGLOBA ; GET MSB OF GLOBAL TABLE ADDR
|
||
0F0B 18 CLC ; CONVERT TO
|
||
0F0C 6526 ADC ZCODE ; ABSOLUTE ADDRESS
|
||
0F0E 8530 STA GLOBAL+HI
|
||
0F10 AD0D2A LDA ZBEGIN+ZGLOBA+1 ; LSB NEEDN'T CHANGE
|
||
0F13 852F STA GLOBAL+LO
|
||
|
||
0F15 AD182A LDA ZBEGIN+ZFWORD ; DO SAME FOR FWORDS TABLE
|
||
0F18 18 CLC
|
||
0F19 6526 ADC ZCODE
|
||
0F1B 8534 STA FWORDS+HI
|
||
0F1D AD192A LDA ZBEGIN+ZFWORD+1 ; NO CHANGE FOR LSB
|
||
0F20 8533 STA FWORDS+LO
|
||
|
||
0F22 AD082A LDA ZBEGIN+ZVOCAB ; NOW DO VOCABULARY TABLE
|
||
0F25 18 CLC
|
||
0F26 6526 ADC ZCODE
|
||
0F28 8532 STA VOCAB+HI
|
||
0F2A AD092A LDA ZBEGIN+ZVOCAB+1 ; LSB SAME
|
||
0F2D 8531 STA VOCAB+LO
|
||
|
||
0F2F AD0A2A LDA ZBEGIN+ZOBJEC ; NOT TO MENTION
|
||
0F32 18 CLC ; THE OBJECT TABLE
|
||
0F33 6526 ADC ZCODE
|
||
0F35 8536 STA OBJTAB+HI
|
||
0F37 AD0B2A LDA ZBEGIN+ZOBJEC+1 ; LSB SAME
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 18
|
||
--- WARMSTART ROUTINE ---
|
||
|
||
0F3A 8535 STA OBJTAB+LO
|
||
|
||
0F3C ; FETCH THE REST OF THE PRELOAD
|
||
|
||
0F3C A570 LDPRE: LDA DBLOCK+LO ; CHECK CURRENT BLOCK #
|
||
0F3E C527 CMP ZPURE ; LOADED LAST PRELOAD PAGE YET?
|
||
0F40 B006 BCS WARMEX ; YES, TIME TO PLAY!
|
||
0F42 208A23 JSR GETDSK ; ELSE GRAB NEXT Z-BLOCK
|
||
0F45 4C3C0F JMP LDPRE
|
||
|
||
0F48 AD062A WARMEX: LDA ZBEGIN+ZGO ; GET START ADDRESS OF Z-CODE
|
||
0F4B 851A STA ZPCM ; MSB
|
||
0F4D AD072A LDA ZBEGIN+ZGO+1 ; AND LSB
|
||
0F50 8519 STA ZPCL ; HIGH BIT ALREADY ZEROED
|
||
|
||
0F52 E662 INC SCRIPT ; ENABLE SCRIPTING
|
||
0F54 AD112A LDA ZBEGIN+ZSCRIP+1 ; STUFF IN THE
|
||
0F57 0D0322 ORA SFLAG ; PREVIOUS SCRIPT MODE
|
||
0F5A 8D112A STA ZBEGIN+ZSCRIP+1 ; (BM 5/14/85)
|
||
|
||
0F5D 200E23 JSR CLS ; CLEAR SCREEN, DISABLE SPLIT
|
||
|
||
0F60 ; ... AND FALL INTO MAIN LOOP
|
||
|
||
END
|
||
INCLUD MAIN.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 19
|
||
--- MAIN LOOP ---
|
||
|
||
|
||
0F60 A900 MLOOP: LDA #0
|
||
0F62 8504 STA NARGS ; RESET # ARGUMENTS
|
||
0F64 20E419 JSR NEXTPC ; GET NEXT INSTRUCTION INTO [A]
|
||
0F67 8503 STA OPCODE ; SAVE IT HERE
|
||
|
||
0F69 IF DEBUG
|
||
0F69 STA MBYTE
|
||
0F69 LDA #0 ; BREAKPOINT #0
|
||
0F69 JSR DOBUG
|
||
0F69 LDA MBYTE
|
||
0F69 ENDIF
|
||
|
||
0F69 ; DECODE AN OPCODE
|
||
|
||
0F69 AA TAX ; SET FLAGS
|
||
0F6A 3003 BMI DC0 ; IF POSITIVE,
|
||
0F6C 4C2A10 JMP OP2 ; IT'S A 2-OP
|
||
|
||
0F6F C9B0 DC0: CMP #$B0
|
||
0F71 B003 BCS DC1
|
||
0F73 4CFB0F JMP OP1 ; OR MAYBE A 1-OP
|
||
|
||
0F76 C9C0 DC1: CMP #$C0
|
||
0F78 B003 BCS OPEXT
|
||
0F7A 4CEC0F JMP OP0 ; PERHAPS A 0-OP
|
||
|
||
0F7D ; --------------
|
||
0F7D ; HANDLE AN X-OP
|
||
0F7D ; --------------
|
||
|
||
0F7D 20E419 OPEXT: JSR NEXTPC ; GRAB THE ARGUMENT ID BYTE
|
||
0F80 850D STA ABYTE ; HOLD IT HERE
|
||
|
||
0F82 A200 LDX #0
|
||
0F84 860E STX ADEX ; INIT ARGUMENT INDEX
|
||
0F86 F006 BEQ OPX1 ; JUMP TO TOP OF LOOP
|
||
|
||
0F88 A50D OPX0: LDA ABYTE ; GET ARG BYTE
|
||
0F8A 0A ASL A ; SHIFT NEXT 2 ARG BITS
|
||
0F8B 0A ASL A ; INTO BITS 7 & 6
|
||
0F8C 850D STA ABYTE ; HOLD FOR LATER
|
||
|
||
0F8E 29C0 OPX1: AND #%11000000 ; MASK OUT GARBAGE BITS
|
||
0F90 D006 BNE OPX2
|
||
0F92 207610 JSR GETLNG ; 00 = LONG IMMEDIATE
|
||
0F95 4CA90F JMP OPXNXT
|
||
|
||
0F98 C940 OPX2: CMP #%01000000 ; IS IT A SHORT IMMEDIATE?
|
||
0F9A D006 BNE OPX3 ; NO, KEEP GUESSING
|
||
0F9C 207210 JSR GETSHT ; 01 = SHORT IMMEDIATE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 20
|
||
--- MAIN LOOP ---
|
||
|
||
0F9F 4CA90F JMP OPXNXT
|
||
|
||
0FA2 C980 OPX3: CMP #%10000000 ; LAST TEST
|
||
0FA4 D017 BNE OPX4 ; 11 = NO MORE ARGUMENTS
|
||
0FA6 208A10 JSR GETVAR ; 10 = VARIABLE
|
||
|
||
0FA9 A60E OPXNXT: LDX ADEX ; RETRIEVE ARGUMENT INDEX
|
||
0FAB A50F LDA VALUE+LO ; GRAB LSB OF VALUE
|
||
0FAD 9505 STA ARG1+LO,X ; STORE IN ARGUMENT TABLE
|
||
0FAF A510 LDA VALUE+HI ; GRAB MSB OF VALUE
|
||
0FB1 9506 STA ARG1+HI,X ; STORE THAT, TOO
|
||
|
||
0FB3 E604 INC NARGS ; UPDATE ARGUMENT COUNTER
|
||
|
||
0FB5 E8 INX
|
||
0FB6 E8 INX
|
||
0FB7 860E STX ADEX ; UPDATE INDEX
|
||
0FB9 E008 CPX #8 ; DONE 4 ARGUMENTS YET?
|
||
0FBB 90CB BCC OPX0 ; NO, GET SOME MORE
|
||
|
||
0FBD ; ALL X-OP ARGUMENTS READY
|
||
|
||
0FBD A503 OPX4: LDA OPCODE ; IS THIS
|
||
0FBF C9E0 CMP #$E0 ; AN EXTENDED 2-OP?
|
||
0FC1 B003 BCS DOXOP ; NO, IT'S A REAL X-OP
|
||
0FC3 4C5310 JMP OP2EX ; ELSE TREAT IT LIKE A 2-OP
|
||
|
||
0FC6 A234 DOXOP: LDX #LOW OPTX ; GET ADDR OF X-OP TABLE
|
||
0FC8 A012 LDY #HIGH OPTX ; INTO [X/Y]
|
||
0FCA 291F AND #%00011111 ; ISOLATE OP ID BITS
|
||
0FCC C90C CMP #NOPSX ; IS IT A LEGAL X-OP?
|
||
0FCE 9005 BCC DODIS ; YUP; TIME TO DISPATCH IT
|
||
|
||
0FD0 ; *** ERROR #1 -- ILLEGAL X-OP ***
|
||
|
||
0FD0 A901 LDA #1
|
||
0FD2 4CC41D JMP ZERROR
|
||
|
||
0FD5 ; ---------------
|
||
0FD5 ; OPCODE DISPATCH
|
||
0FD5 ; ---------------
|
||
|
||
0FD5 ; ENTRY: MASKED OPCODE INDEX IN [A]
|
||
0FD5 ; OP-TABLE ADDR IN X/Y (LSB/MSB)
|
||
|
||
0FD5 8611 DODIS: STX I+LO ; SAVE TABLE ADDRESS
|
||
0FD7 8412 STY I+HI ; IN A POINTER
|
||
|
||
0FD9 0A ASL A ; WORD-ALIGN THE OP INDEX
|
||
0FDA A8 TAY
|
||
0FDB B111 LDA (I),Y ; GET LSB OF DISPATCH ADDRESS
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 21
|
||
--- MAIN LOOP ---
|
||
|
||
0FDD 8DE70F STA GO+LO ; INSTALL AS JSR OPERAND
|
||
0FE0 C8 INY
|
||
0FE1 B111 LDA (I),Y ; SAME WITH MSB
|
||
0FE3 8DE80F STA GO+HI
|
||
|
||
0FE6 20 DB $20 ; 6502 "JSR" OPCODE
|
||
0FE7 0000 GO: DW $0000 ; DUMMY OPERAND BYTES
|
||
|
||
0FE9 4C600F JMP MLOOP ; GO BACK FOR ANOTHER OPCODE
|
||
|
||
0FEC ; -------------
|
||
0FEC ; HANDLE A 0-OP
|
||
0FEC ; -------------
|
||
|
||
0FEC A2C6 OP0: LDX #LOW OPT0 ; GET 0-OP TABLE ADDR
|
||
0FEE A011 LDY #HIGH OPT0 ; INTO [X/Y]
|
||
0FF0 290F AND #%00001111 ; ISOLATE 0-OP ID BITS
|
||
0FF2 C90E CMP #NOPS0 ; OUT OF RANGE?
|
||
0FF4 90DF BCC DODIS ; NO, DISPATCH IT
|
||
|
||
0FF6 ; *** ERROR #2 -- ILLEGAL 0-OP ***
|
||
|
||
0FF6 A902 LDA #2
|
||
0FF8 4CC41D JMP ZERROR
|
||
|
||
0FFB ; -------------
|
||
0FFB ; HANDLE A 1-OP
|
||
0FFB ; -------------
|
||
|
||
0FFB 2930 OP1: AND #%00110000 ; ISOLATE ARGUMENT BITS
|
||
0FFD D006 BNE OP1A
|
||
0FFF 207610 JSR GETLNG ; 00 = LONG IMMEDIATE
|
||
1002 4C1610 JMP OP1EX
|
||
|
||
1005 C910 OP1A: CMP #%00010000 ; TEST AGAIN
|
||
1007 D006 BNE OP1B
|
||
1009 207210 JSR GETSHT ; 01 = SHORT IMMEDIATE
|
||
100C 4C1610 JMP OP1EX
|
||
|
||
100F C920 OP1B: CMP #%00100000 ; ONE MORE TEST
|
||
1011 D012 BNE BADOP1 ; UNDEFINED STATE!
|
||
1013 208A10 JSR GETVAR ; 10 = VARIABLE
|
||
|
||
1016 206710 OP1EX: JSR V2A1 ; MOVE [VALUE] TO [ARG1], UPDATE [NARGS]
|
||
1019 A2E2 LDX #LOW OPT1 ; GET ADDR OF 1-OP TABLE
|
||
101B A011 LDY #HIGH OPT1 ; INTO [X/Y]
|
||
101D A503 LDA OPCODE ; RESTORE OPCODE
|
||
101F 290F AND #%00001111 ; ISOLATE OP ID BITS
|
||
1021 C910 CMP #NOPS1 ; IF WITHIN RANGE,
|
||
1023 90B0 BCC DODIS ; EXECUTE THE 1-OP
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 22
|
||
--- MAIN LOOP ---
|
||
|
||
1025 ; *** ERROR #3 -- ILLEGAL 1-OP ***
|
||
|
||
1025 A903 BADOP1: LDA #3
|
||
1027 4CC41D JMP ZERROR
|
||
|
||
102A ; -------------
|
||
102A ; HANDLE A 2-OP
|
||
102A ; -------------
|
||
|
||
102A 2940 OP2: AND #%01000000 ; ISOLATE 1ST ARG BIT
|
||
102C D006 BNE OP2A
|
||
102E 207210 JSR GETSHT ; 0 = SHORT IMMEDIATE
|
||
1031 4C3710 JMP OP2B
|
||
1034 208A10 OP2A: JSR GETVAR ; 1 = VARIABLE
|
||
1037 206710 OP2B: JSR V2A1 ; [VALUE] TO [ARG1], UPDATE [NARGS]
|
||
|
||
103A A503 LDA OPCODE ; RESTORE OPCODE BYTE
|
||
103C 2920 AND #%00100000 ; ISOLATE 2ND ARG BIT
|
||
103E D006 BNE OP2C
|
||
1040 207210 JSR GETSHT ; 0 = SHORT IMMEDIATE
|
||
1043 4C4910 JMP OP2D
|
||
1046 208A10 OP2C: JSR GETVAR ; 1 = VARIABLE
|
||
1049 A50F OP2D: LDA VALUE+LO ; MOVE 2ND [VALUE]
|
||
104B 8507 STA ARG2+LO ; INTO [ARG2]
|
||
104D A510 LDA VALUE+HI
|
||
104F 8508 STA ARG2+HI
|
||
1051 E604 INC NARGS ; UPDATE ARGUMENT COUNT
|
||
|
||
1053 ; EXECUTE A 2-OP OR EXTENDED 2-OP
|
||
|
||
1053 A202 OP2EX: LDX #LOW OPT2 ; LSB OF DISPATCH TABLE
|
||
1055 A012 LDY #HIGH OPT2 ; MSB
|
||
1057 A503 LDA OPCODE ; RESTORE OPCODE BYTE
|
||
1059 291F AND #%00011111 ; ISOLATE OP ID BITS
|
||
105B C919 CMP #NOPS2
|
||
105D B003 BCS BADOP2 ; ERROR IF OUT OF RANGE
|
||
105F 4CD50F JMP DODIS ; ELSE DISPATCH
|
||
|
||
1062 ; *** ERROR #4 -- ILLEGAL 2-OP ****
|
||
|
||
1062 A904 BADOP2: LDA #4
|
||
1064 4CC41D JMP ZERROR
|
||
|
||
1067 ; --------------------------------------
|
||
1067 ; MOVE [VALUE] TO [ARG1], UPDATE [NARGS]
|
||
1067 ; --------------------------------------
|
||
|
||
1067 A50F V2A1: LDA VALUE+LO
|
||
1069 8505 STA ARG1+LO
|
||
106B A510 LDA VALUE+HI
|
||
106D 8506 STA ARG1+HI
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 23
|
||
--- MAIN LOOP ---
|
||
|
||
106F E604 INC NARGS
|
||
1071 60 RTS
|
||
|
||
END
|
||
INCLUD SUBS.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 24
|
||
--- OPCODE SUPPORT SUBROUTINES ---
|
||
|
||
|
||
1072 ; -----------------------
|
||
1072 ; FETCH A SHORT IMMEDIATE
|
||
1072 ; -----------------------
|
||
|
||
1072 A900 GETSHT: LDA #0 ; MSB IS ZERO
|
||
1074 F003 BEQ GETV ; FETCH LSB FROM Z-CODE
|
||
|
||
1076 ; ----------------------
|
||
1076 ; FETCH A LONG IMMEDIATE
|
||
1076 ; ----------------------
|
||
|
||
1076 20E419 GETLNG: JSR NEXTPC ; GRAB MSB
|
||
|
||
1079 8510 GETV: STA VALUE+HI
|
||
107B 20E419 JSR NEXTPC ; GRAB LSB
|
||
107E 850F STA VALUE+LO
|
||
1080 60 RTS
|
||
|
||
1081 ; ----------------
|
||
1081 ; FETCH A VARIABLE
|
||
1081 ; ----------------
|
||
|
||
1081 ; FROM INSIDE AN OPCODE (VARIABLE ID IN [A])
|
||
|
||
1081 AA VARGET: TAX ; IF NON-ZERO,
|
||
1082 D00B BNE GETVR1 ; ACCESS A VARIABLE
|
||
|
||
1084 20B010 JSR POPVAL ; ELSE PULL VAR OFF Z-STACK
|
||
1087 4CC610 JMP PSHVAL ; WITHOUT ALTERING STACK
|
||
|
||
108A ; FROM THE MAIN LOOP (VARIABLE ID IN Z-CODE)
|
||
|
||
108A 20E419 GETVAR: JSR NEXTPC ; GRAB VAR-TYPE BYTE
|
||
108D F021 BEQ POPVAL ; VALUE IS ON Z-STACK
|
||
|
||
108F ; IS VARIABLE LOCAL OR GLOBAL?
|
||
|
||
108F C910 GETVR1: CMP #$10 ; IF >= 16,
|
||
1091 B010 BCS GETVRG ; IT'S GLOBAL
|
||
|
||
1093 ; HANDLE A LOCAL VARIABLE
|
||
|
||
1093 38 GETVRL: SEC
|
||
1094 E901 SBC #1 ; FORM A ZERO-ALIGNED
|
||
1096 0A ASL A ; WORD INDEX
|
||
1097 AA TAX ; INTO THE [LOCALS] TABLE
|
||
|
||
1098 BD000D LDA LOCALS+LO,X ; GRAB LSB
|
||
109B 850F STA VALUE+LO
|
||
109D BD010D LDA LOCALS+HI,X ; AND MSB
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 25
|
||
--- OPCODE SUPPORT SUBROUTINES ---
|
||
|
||
10A0 8510 STA VALUE+HI
|
||
10A2 60 RTS
|
||
|
||
10A3 ; HANDLE A GLOBAL VARIABLE
|
||
|
||
10A3 201411 GETVRG: JSR GVCALC ; GET ADDRESS OF GLOBAL INTO [I]
|
||
10A6 B111 LDA (I),Y ; MSB OF GLOBAL ([Y] = 0)
|
||
10A8 8510 STA VALUE+HI
|
||
10AA C8 INY ; = 1
|
||
10AB B111 LDA (I),Y ; LSB OF GLOBAL
|
||
10AD 850F STA VALUE+LO ; SAVE IT
|
||
10AF 60 RTS ; AND WE'RE DONE
|
||
|
||
10B0 ; ----------------------------------
|
||
10B0 ; POP Z-STACK INTO [VALUE] AND [X/A]
|
||
10B0 ; ----------------------------------
|
||
|
||
10B0 C617 POPVAL: DEC ZSP
|
||
10B2 F00D BEQ UNDER ; UNDERFLOW IF ZERO!
|
||
|
||
10B4 A417 LDY ZSP ; READ STACK POINTER
|
||
10B6 BE0009 LDX ZSTAKL,Y ; GRAB LSB OF STACK VALUE
|
||
10B9 860F STX VALUE+LO ; GIVE TO [VALUE]
|
||
10BB B9000A LDA ZSTAKH,Y ; ALSO GRAB MSB
|
||
10BE 8510 STA VALUE+HI ; A SIMILAR FATE
|
||
10C0 60 RTS
|
||
|
||
10C1 ; *** ERROR #5 -- Z-STACK UNDERFLOW ***
|
||
|
||
10C1 A905 UNDER: LDA #5
|
||
10C3 4CC41D JMP ZERROR
|
||
|
||
10C6 ; -----------------------
|
||
10C6 ; PUSH [VALUE] TO Z-STACK
|
||
10C6 ; -----------------------
|
||
|
||
10C6 A60F PSHVAL: LDX VALUE+LO
|
||
10C8 A510 LDA VALUE+HI
|
||
|
||
10CA ; ---------------------
|
||
10CA ; PUSH [X/A] TO Z-STACK
|
||
10CA ; ---------------------
|
||
|
||
10CA A417 PUSHXA: LDY ZSP ; READ STACK POINTER
|
||
10CC 99000A STA ZSTAKH,Y ; PUSH MSB IN [A]
|
||
10CF 8A TXA
|
||
10D0 990009 STA ZSTAKL,Y ; AND LSB IN [X]
|
||
|
||
10D3 E617 INC ZSP ; UPDATE Z-STACK POINTER
|
||
10D5 F001 BEQ OVER ; OVERFLOW IF ZEROED!
|
||
10D7 60 RTS
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 26
|
||
--- OPCODE SUPPORT SUBROUTINES ---
|
||
|
||
|
||
10D8 ; *** ERROR #6 -- Z-STACK OVERFLOW ***
|
||
|
||
10D8 A906 OVER: LDA #6
|
||
10DA 4CC41D JMP ZERROR
|
||
|
||
10DD ; --------------
|
||
10DD ; RETURN A VALUE
|
||
10DD ; --------------
|
||
|
||
10DD ; FROM WITHIN AN OPCODE (VARIABLE ID IN [A])
|
||
|
||
10DD AA VARPUT: TAX ; IF ZERO,
|
||
10DE D013 BNE PUTVR1
|
||
|
||
10E0 C617 DEC ZSP ; FLUSH TOP WORD OFF STACK
|
||
10E2 D0E2 BNE PSHVAL ; AND REPLACE WITH [VALUE]
|
||
10E4 F0DB BEQ UNDER ; ERROR IF [ZSP] BECAME ZERO!
|
||
|
||
10E6 ; RETURN A ZERO
|
||
|
||
10E6 A900 RET0: LDA #0
|
||
|
||
10E8 ; RETURN BYTE IN [A]
|
||
|
||
10E8 850F PUTBYT: STA VALUE+LO
|
||
10EA A900 LDA #0
|
||
10EC 8510 STA VALUE+HI ; CLEAR MSB
|
||
|
||
10EE ; RETURN [VALUE]
|
||
|
||
10EE 20E419 PUTVAL: JSR NEXTPC ; GET VARIABLE ID BYTE
|
||
10F1 F0D3 BEQ PSHVAL ; [VALUE] GOES TO Z-STACK
|
||
|
||
10F3 ; LOCAL OR GLOBAL VARIABLE?
|
||
|
||
10F3 C910 PUTVR1: CMP #$10 ; IF >= 16,
|
||
10F5 B010 BCS PUTVLG ; IT'S GLOBAL
|
||
|
||
10F7 ; PUT A LOCAL VARIABLE
|
||
|
||
10F7 38 PUTVLL: SEC
|
||
10F8 E901 SBC #1 ; FORM A ZERO-ALIGNED
|
||
10FA 0A ASL A ; WORD INDEX
|
||
10FB AA TAX ; INTO THE [LOCALS] TABLE
|
||
|
||
10FC A50F LDA VALUE+LO ; GRAB LSB
|
||
10FE 9D000D STA LOCALS+LO,X ; SAVE IN LOCAL TABLE
|
||
1101 A510 LDA VALUE+HI ; DO SAME TO
|
||
1103 9D010D STA LOCALS+HI,X ; MSB
|
||
1106 60 RTS
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 27
|
||
--- OPCODE SUPPORT SUBROUTINES ---
|
||
|
||
|
||
1107 ; RETURN A GLOBAL VARIABLE
|
||
|
||
1107 201411 PUTVLG: JSR GVCALC
|
||
110A A510 LDA VALUE+HI ; GET MSB
|
||
110C 9111 STA (I),Y ; STORE AS 1ST BYTE ([Y] = 0)
|
||
110E C8 INY ; = 1
|
||
110F A50F LDA VALUE+LO ; NOW GET LSB
|
||
1111 9111 STA (I),Y ; STORE AS 2ND BYTE
|
||
1113 60 RTS
|
||
|
||
1114 ; -----------------------
|
||
1114 ; CALC GLOBAL WORD OFFSET
|
||
1114 ; -----------------------
|
||
|
||
1114 ; ENTRY: VAR-ID BYTE (16-255) IN [A]
|
||
1114 ; EXIT: ABSOLUTE ADDRESS OF GLOBAL VAR IN [I]
|
||
1114 ; [Y] = 0 FOR INDEXING
|
||
|
||
1114 38 GVCALC: SEC
|
||
1115 E910 SBC #$10 ; FORM A ZERO-ALIGNED INDEX
|
||
1117 A000 LDY #0 ; MAKE SURE MSB OF OFFSET AND [Y]
|
||
1119 8412 STY I+HI ; ARE CLEARED
|
||
|
||
111B 0A ASL A ; MULTIPLY OFFSET BY 2
|
||
111C 2612 ROL I+HI ; TO WORD-ALIGN IT
|
||
|
||
111E 18 CLC ; ADD OFFSET TO ADDR OF GLOBAL TABLE
|
||
111F 652F ADC GLOBAL+LO ; TO FORM THE ABSOLUTE
|
||
1121 8511 STA I+LO ; ADDRESS OF THE
|
||
1123 A512 LDA I+HI ; DESIRED GLOBAL VARIABLE
|
||
1125 6530 ADC GLOBAL+HI ; STORE ADDRESS BACK IN [VAL]
|
||
1127 8512 STA I+HI ; AS A POINTER
|
||
|
||
1129 60 WCEX: RTS
|
||
|
||
112A ; ---------------
|
||
112A ; PREDICATE FAILS
|
||
112A ; ---------------
|
||
|
||
112A 20E419 PREDF: JSR NEXTPC ; GET 1ST BRANCH BYTE
|
||
112D 100C BPL PREDB ; DO BRANCH IF BIT 7 OFF
|
||
|
||
112F ; -----------------------
|
||
112F ; IGNORE PREDICATE BRANCH
|
||
112F ; -----------------------
|
||
|
||
112F ; ENTRY: 1ST BRANCH BYTE IN [A]
|
||
|
||
112F 2940 PREDNB: AND #%01000000 ; TEST BIT 6
|
||
1131 D0F6 BNE WCEX ; SHORT BRANCH IF SET
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 28
|
||
--- OPCODE SUPPORT SUBROUTINES ---
|
||
|
||
1133 4CE419 JMP NEXTPC ; ELSE SKIP OVER 2ND BRANCH BYTE
|
||
|
||
1136 ; ------------------
|
||
1136 ; PREDICATE SUCCEEDS
|
||
1136 ; ------------------
|
||
|
||
1136 20E419 PREDS: JSR NEXTPC ; GET 1ST BRANCH BYTE
|
||
1139 10F4 BPL PREDNB ; DON'T BRANCH IF BIT 7 CLEAR
|
||
|
||
113B ; --------------------------
|
||
113B ; PERFORM A PREDICATE BRANCH
|
||
113B ; --------------------------
|
||
|
||
113B ; ENTRY: 1ST PRED BYTE IN [A]
|
||
|
||
113B AA PREDB: TAX ; SAVE HERE
|
||
113C 2940 AND #%01000000 ; LONG OR SHORT BRANCH?
|
||
113E F00B BEQ PREDLB ; LONG IF BIT 6 IS CLEAR
|
||
|
||
1140 ; HANDLE A SHORT BRANCH
|
||
|
||
1140 8A TXA ; RESTORE PRED BYTE
|
||
1141 293F AND #%00111111 ; FORM SHORT OFFSET
|
||
1143 850F STA VALUE+LO ; USE AS LSB OF BRANCH OFFSET
|
||
1145 A900 LDA #0
|
||
1147 8510 STA VALUE+HI ; MSB OF OFFSET IS ZERO
|
||
1149 F013 BEQ PREDB1 ; DO THE BRANCH
|
||
|
||
114B ; HANDLE A LONG BRANCH
|
||
|
||
114B 8A PREDLB: TXA ; RESTORE 1ST PRED BYTE
|
||
114C 293F AND #%00111111 ; FORM MSB OF OFFSET
|
||
|
||
114E AA TAX ; SAVE HERE FOR REFERENCE
|
||
|
||
114F 2920 AND #%00100000 ; CHECK SIGN OF 14-BIT VALUE
|
||
1151 F004 BEQ DOB2 ; POSITIVE IF ZERO, SO USE [X]
|
||
|
||
1153 8A TXA ; ELSE RESTORE BYTE
|
||
1154 09E0 ORA #%11100000 ; EXTEND THE SIGN BIT
|
||
1156 AA TAX ; BACK HERE FOR STORAGE
|
||
|
||
1157 8610 DOB2: STX VALUE+HI
|
||
1159 20E419 JSR NEXTPC ; FETCH LSB OF 14-BIT OFFSET
|
||
115C 850F STA VALUE+LO
|
||
|
||
115E ; BRANCH TO Z-ADDRESS IN [VALUE]
|
||
|
||
115E A510 PREDB1: LDA VALUE+HI ; CHECK MSB OF OFFSET
|
||
1160 D00E BNE PREDB3 ; DO BRANCH IF NZ
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 29
|
||
--- OPCODE SUPPORT SUBROUTINES ---
|
||
|
||
1162 A50F LDA VALUE+LO ; IF LSB IS NON-ZERO,
|
||
1164 D003 BNE PREDB2 ; MAKE SURE IT ISN'T 1
|
||
1166 4C5712 JMP ZRFALS ; ELSE DO AN "RFALSE"
|
||
|
||
1169 C901 PREDB2: CMP #1 ; IF OFFSET = 1
|
||
116B D003 BNE PREDB3
|
||
116D 4C4C12 JMP ZRTRUE ; DO AN "RTRUE"
|
||
|
||
1170 ; ENTRY POINT FOR "JUMP"
|
||
|
||
1170 20AA11 PREDB3: JSR DECVAL ; SUBTRACT 2 FROM THE OFFSET
|
||
1173 20AA11 JSR DECVAL ; IN [VALUE]
|
||
|
||
1176 A900 LDA #0 ; CLEAR THE MSB
|
||
1178 8512 STA I+HI ; OF [I]
|
||
|
||
117A A510 LDA VALUE+HI ; MAKE MSB OF OFFSET
|
||
117C 8511 STA I+LO ; THE LSB OF [I]
|
||
117E 0A ASL A ; EXTEND THE SIGN OF OFFSET
|
||
117F 2612 ROL I+HI ; INTO MSB OF [I]
|
||
|
||
1181 A50F LDA VALUE+LO ; GET LSB OF OFFSET
|
||
1183 18 CLC
|
||
1184 6519 ADC ZPCL ; ADD LOW 8 BITS OF ZPC
|
||
1186 9006 BCC PREDB5 ; IF OVERFLOWED,
|
||
|
||
1188 E611 INC I+LO ; UPDATE UPPER 9 BITS
|
||
118A D002 BNE PREDB5
|
||
118C E612 INC I+HI
|
||
|
||
118E 8519 PREDB5: STA ZPCL ; UPDATE ZPC
|
||
|
||
1190 A511 LDA I+LO ; IF UPPER 9 BITS ARE ZERO,
|
||
1192 0512 ORA I+HI ; NO NEED TO CHANGE PAGES
|
||
1194 F013 BEQ ZNOOP
|
||
|
||
1196 A511 LDA I+LO ; ELSE CALC NEW UPPER BITS
|
||
1198 18 CLC
|
||
1199 651A ADC ZPCM
|
||
119B 851A STA ZPCM
|
||
|
||
119D A512 LDA I+HI
|
||
119F 651B ADC ZPCH
|
||
11A1 2901 AND #%00000001 ; USE ONLY BIT 0
|
||
11A3 851B STA ZPCH
|
||
|
||
11A5 A900 LDA #0
|
||
11A7 851C STA ZPCFLG ; [ZPC] NO LONGER VALID
|
||
|
||
11A9 ; FALL THROUGH ...
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 30
|
||
--- OPCODE SUPPORT SUBROUTINES ---
|
||
|
||
11A9 ; ----
|
||
11A9 ; NOOP
|
||
11A9 ; ----
|
||
|
||
11A9 60 ZNOOP: RTS
|
||
|
||
11AA ; -----------------
|
||
11AA ; DECREMENT [VALUE]
|
||
11AA ; -----------------
|
||
|
||
11AA A50F DECVAL: LDA VALUE+LO
|
||
11AC 38 SEC
|
||
11AD E901 SBC #1
|
||
11AF 850F STA VALUE+LO
|
||
11B1 B002 BCS DVX
|
||
11B3 C610 DEC VALUE+HI
|
||
11B5 60 DVX: RTS
|
||
|
||
11B6 ; -----------------
|
||
11B6 ; INCREMENT [VALUE]
|
||
11B6 ; -----------------
|
||
|
||
11B6 E60F INCVAL: INC VALUE+LO
|
||
11B8 D002 BNE IVX
|
||
11BA E610 INC VALUE+HI
|
||
11BC 60 IVX: RTS
|
||
|
||
11BD ; ----------------------
|
||
11BD ; MOVE [ARG1] TO [VALUE]
|
||
11BD ; ----------------------
|
||
|
||
11BD A505 A12VAL: LDA ARG1+LO
|
||
11BF 850F STA VALUE+LO
|
||
11C1 A506 LDA ARG1+HI
|
||
11C3 8510 STA VALUE+HI
|
||
11C5 60 RTS
|
||
|
||
END
|
||
INCLUD DISPATCH.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 31
|
||
--- OPCODE DISPATCH TABLES ---
|
||
|
||
|
||
11C6 ; 0-OPS
|
||
|
||
11C6 4C12 OPT0: DW ZRTRUE ; 0
|
||
11C8 5712 DW ZRFALS ; 1
|
||
11CA 5B12 DW ZPRI ; 2
|
||
11CC 7812 DW ZPRR ; 3
|
||
11CE A911 DW ZNOOP ; 4
|
||
11D0 6426 DW ZSAVE ; 5
|
||
11D2 FF26 DW ZREST ; 6
|
||
11D4 091E DW ZSTART ; 7
|
||
11D6 8112 DW ZRSTAK ; 8
|
||
11D8 B010 DW POPVAL ; 9
|
||
11DA E51D DW ZQUIT ; 10
|
||
11DC 831E DW ZCRLF ; 11
|
||
11DE 081F DW ZUSL ; 12
|
||
11E0 8712 DW ZVER ; 13
|
||
|
||
000E NOPS0 EQU 14 ; NUMBER OF 0-OPS
|
||
|
||
11E2 ; 1-OPS
|
||
|
||
11E2 E512 OPT1: DW ZZERO ; 0
|
||
11E4 EE12 DW ZNEXT ; 1
|
||
11E6 F712 DW ZFIRST ; 2
|
||
11E8 0A13 DW ZLOC ; 3
|
||
11EA 1613 DW ZPTSIZ ; 4
|
||
11EC 3313 DW ZINC ; 5
|
||
11EE 3E13 DW ZDEC ; 6
|
||
11F0 4B13 DW ZPRB ; 7
|
||
11F2 2510 DW BADOP1 ; 8 (UNDEFINED)
|
||
11F4 5913 DW ZREMOV ; 9
|
||
11F6 9B13 DW ZPRD ; 10
|
||
11F8 B813 DW ZRET ; 11
|
||
11FA 0014 DW ZJUMP ; 12
|
||
11FC 0614 DW ZPRINT ; 13
|
||
11FE 1414 DW ZVALUE ; 14
|
||
1200 1C14 DW ZBCOM ; 15
|
||
|
||
0010 NOPS1 EQU 16 ; NUMBER OF 1-OPS
|
||
|
||
1202 ; 2-OPS
|
||
|
||
1202 6210 OPT2: DW BADOP2 ; 0 (UNDEFINED)
|
||
1204 CA16 DW ZEQUAL ; 1
|
||
1206 2C14 DW ZLESS ; 2
|
||
1208 4014 DW ZGRTR ; 3
|
||
120A 3214 DW ZDLESS ; 4
|
||
120C 4B14 DW ZIGRTR ; 5
|
||
120E 7B14 DW ZIN ; 6
|
||
1210 8B14 DW ZBTST ; 7
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- INIT & MAINLINE PAGE 32
|
||
--- OPCODE DISPATCH TABLES ---
|
||
|
||
1212 9E14 DW ZBOR ; 8
|
||
1214 AA14 DW ZBAND ; 9
|
||
1216 B614 DW ZFSETP ; 10
|
||
1218 CA14 DW ZFSET ; 11
|
||
121A DD14 DW ZFCLR ; 12
|
||
121C F414 DW ZSET ; 13
|
||
121E 0115 DW ZMOVE ; 14
|
||
1220 2B15 DW ZGET ; 15
|
||
1222 3B15 DW ZGETB ; 16
|
||
1224 5815 DW ZGETP ; 17
|
||
1226 A015 DW ZGETPT ; 18
|
||
1228 CD15 DW ZNEXTP ; 19
|
||
122A EC15 DW ZADD ; 20
|
||
122C F915 DW ZSUB ; 21
|
||
122E 0616 DW ZMUL ; 22
|
||
1230 2A16 DW ZDIV ; 23
|
||
1232 3416 DW ZMOD ; 24
|
||
|
||
0019 NOPS2 EQU 25 ; NUMBER OF 2-OPS
|
||
|
||
1234 ; X-OPS
|
||
|
||
1234 FD16 OPTX: DW ZCALL ; 0
|
||
1236 9217 DW ZPUT ; 1
|
||
1238 A017 DW ZPUTB ; 2
|
||
123A BB17 DW ZPUTP ; 3
|
||
123C 6718 DW ZREAD ; 4
|
||
123E EC17 DW ZPRC ; 5
|
||
1240 F117 DW ZPRN ; 6
|
||
1242 3618 DW ZRAND ; 7
|
||
1244 5818 DW ZPUSH ; 8
|
||
1246 5F18 DW ZPOP ; 9
|
||
1248 7A22 DW ZSPLIT ; 10
|
||
124A BE22 DW ZSCRN ; 11
|
||
|
||
000C NOPSX EQU 12 ; NUMBER OF X-OPS
|
||
|
||
END
|
||
|
||
INCLUD OPS0.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 33
|
||
--- 0-OPS ---
|
||
|
||
|
||
124C ; -----
|
||
124C ; RTRUE
|
||
124C ; -----
|
||
|
||
124C ; SIMULATE A "RETURN 1"
|
||
|
||
124C A201 ZRTRUE: LDX #1
|
||
|
||
124E A900 ZRT0: LDA #0
|
||
|
||
1250 8605 ZRT1: STX ARG1+LO ; GIVE TO
|
||
1252 8506 STA ARG1+HI ; [ARG1]
|
||
1254 4CB813 JMP ZRET ; AND DO THE RETURN
|
||
|
||
1257 ; ------
|
||
1257 ; RFALSE
|
||
1257 ; ------
|
||
|
||
1257 ; SIMULATE A "RETURN 0"
|
||
|
||
1257 A200 ZRFALS: LDX #0
|
||
1259 F0F3 BEQ ZRT0
|
||
|
||
125B ; ------
|
||
125B ; PRINTI
|
||
125B ; ------
|
||
|
||
125B ; PRINT Z-STRING FOLLOWING THE OPCODE
|
||
|
||
125B A51B ZPRI: LDA ZPCH ; MOVE [ZPC] INTO [MPC]
|
||
125D 8521 STA MPCH
|
||
125F A51A LDA ZPCM
|
||
1261 8520 STA MPCM
|
||
1263 A519 LDA ZPCL
|
||
1265 851F STA MPCL
|
||
|
||
1267 A900 LDA #0
|
||
1269 8522 STA MPCFLG ; [MPC] NO LONGER VALID
|
||
|
||
126B 200D1B JSR PZSTR ; PRINT THE Z-STRING AT [MPC]
|
||
|
||
126E A205 LDX #5 ; COPY STATE OF [MPC]
|
||
1270 B51F PRIL: LDA MPC,X ; INTO [ZPC]
|
||
1272 9519 STA ZPC,X
|
||
1274 CA DEX
|
||
1275 10F9 BPL PRIL
|
||
1277 60 RTS
|
||
|
||
1278 ; ------
|
||
1278 ; PRINTR
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 34
|
||
--- 0-OPS ---
|
||
|
||
1278 ; ------
|
||
|
||
1278 ; DO A "PRINTI," FOLLOWED BY "CRLF" AND "RTRUE"
|
||
|
||
1278 205B12 ZPRR: JSR ZPRI
|
||
127B 20831E JSR ZCRLF
|
||
127E 4C4C12 JMP ZRTRUE
|
||
|
||
1281 ; ------
|
||
1281 ; RSTACK
|
||
1281 ; ------
|
||
|
||
1281 ; "RETURN" WITH VALUE ON STACK
|
||
|
||
1281 20B010 ZRSTAK: JSR POPVAL ; GET VALUE INTO [X/A]
|
||
1284 4C5012 JMP ZRT1 ; AND GIVE IT TO "RETURN"
|
||
|
||
1287 ; ------
|
||
1287 ; VERIFY
|
||
1287 ; ------
|
||
|
||
1287 ; VERIFY GAME CODE ON DISK
|
||
|
||
1287 202F1E ZVER: JSR VERNUM ; DISPLAY ZIP VERSION NUMBER
|
||
|
||
128A A203 LDX #3
|
||
128C A900 LDA #0
|
||
128E 9513 ZVR: STA J+LO,X ; CLEAR [J], [K]
|
||
1290 951F STA MPC,X ; [MPC] AND [MPCFLG]
|
||
1292 CA DEX
|
||
1293 10F9 BPL ZVR
|
||
|
||
1295 A940 LDA #64 ; POINT [MPC] TO Z-ADDRESS $00040
|
||
1297 851F STA MPCL ; 1ST 64 BYTES AREN'T CHECKED
|
||
|
||
1299 AD1A2A LDA ZBEGIN+ZLENTH ; GET LENGTH OF Z-CODE
|
||
129C 8512 STA I+HI ; IN WORDS
|
||
129E AD1B2A LDA ZBEGIN+ZLENTH+1 ; FIRST MSB
|
||
12A1 8511 STA I+LO ; THEN LSB
|
||
|
||
12A3 0611 ASL I+LO ; CONVERT Z-CODE LENGTH
|
||
12A5 2612 ROL I+HI ; TO # BYTES
|
||
12A7 2615 ROL K+LO ; TOP BIT IN [K+LO]
|
||
|
||
12A9 A916 LDA #K+HI ; PATCH THE "GETBYT" ROUTINE
|
||
12AB 8D251A STA PATCH ; TO USE [K+HI]=0 INSTEAD OF [ZPURE]
|
||
|
||
12AE 201A1A VSUM: JSR GETBYT ; GET A Z-BYTE INTO [A]
|
||
12B1 18 CLC
|
||
12B2 6513 ADC J+LO ; ADD IT TO SUM
|
||
12B4 8513 STA J+LO ; IN [J]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 35
|
||
--- 0-OPS ---
|
||
|
||
12B6 9002 BCC VSUM0
|
||
12B8 E614 INC J+HI
|
||
|
||
12BA A51F VSUM0: LDA MPCL ; END OF Z-CODE YET?
|
||
12BC C511 CMP I+LO ; CHECK LSB
|
||
12BE D0EE BNE VSUM
|
||
|
||
12C0 A520 LDA MPCM ; MIDDLE BYTE
|
||
12C2 C512 CMP I+HI
|
||
12C4 D0E8 BNE VSUM
|
||
|
||
12C6 A521 LDA MPCH ; AND HIGH BIT
|
||
12C8 C515 CMP K+LO
|
||
12CA D0E2 BNE VSUM
|
||
|
||
12CC A927 LDA #ZPURE ; UNPATCH "GETBYT"
|
||
12CE 8D251A STA PATCH
|
||
|
||
12D1 AD1D2A LDA ZBEGIN+ZCHKSM+1 ; GET LSB OF CHECKSUM
|
||
12D4 C513 CMP J+LO ; DOES IT MATCH?
|
||
12D6 D00A BNE BADVER ; NO, PREDICATE FAILS
|
||
|
||
12D8 AD1C2A LDA ZBEGIN+ZCHKSM ; ELSE CHECK MSB
|
||
12DB C514 CMP J+HI ; LOOK GOOD?
|
||
12DD D003 BNE BADVER ; IF MATCHED,
|
||
12DF 4C3611 JMP PREDS ; GAME IS OKAY
|
||
|
||
12E2 4C2A11 BADVER: JMP PREDF
|
||
|
||
END
|
||
INCLUD OPS1.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 36
|
||
--- 1-OPS ---
|
||
|
||
|
||
12E5 ; -----
|
||
12E5 ; ZERO?
|
||
12E5 ; -----
|
||
|
||
12E5 ; [ARG1] = 0?
|
||
|
||
12E5 A505 ZZERO: LDA ARG1+LO
|
||
12E7 0506 ORA ARG1+HI
|
||
12E9 F01C BEQ PFINE
|
||
|
||
12EB 4C2A11 PYUCK: JMP PREDF
|
||
|
||
12EE ; -----
|
||
12EE ; NEXT?
|
||
12EE ; -----
|
||
|
||
12EE ; RETURN "NEXT" POINTER IN OBJECT [ARG1];
|
||
12EE ; FAIL IF LAST AND RETURN ZERO
|
||
|
||
12EE A505 ZNEXT: LDA ARG1+LO
|
||
12F0 20181D JSR OBJLOC ; GET OBJECT ADDR INTO [I]
|
||
12F3 A005 LDY #5 ; POINT TO "NEXT" SLOT
|
||
12F5 D007 BNE FIRST1
|
||
|
||
12F7 ; ------
|
||
12F7 ; FIRST?
|
||
12F7 ; ------
|
||
|
||
12F7 ; RETURN "FIRST" POINTER IN OBJECT [ARG1];
|
||
12F7 ; FAIL IF LAST AND RETURN ZERO
|
||
|
||
12F7 A505 ZFIRST: LDA ARG1+LO
|
||
12F9 20181D JSR OBJLOC ; GET OBJECT ADDR INTO [I]
|
||
12FC A006 LDY #6 ; POINT TO "FIRST" SLOT
|
||
|
||
12FE B111 FIRST1: LDA (I),Y ; GET CONTENTS OF SLOT
|
||
1300 20E810 JSR PUTBYT ; PASS IT TO VARIABLE
|
||
|
||
1303 A50F LDA VALUE+LO ; EXAMINE THE VALUE JUST "PUT"
|
||
1305 F0E4 BEQ PYUCK ; FAIL IF IT WAS ZERO
|
||
|
||
1307 4C3611 PFINE: JMP PREDS ; ELSE REJOICE
|
||
|
||
130A ; ---
|
||
130A ; LOC
|
||
130A ; ---
|
||
|
||
130A ; RETURN THE OBJECT CONTAINING OBJECT [ARG1];
|
||
130A ; RETURN ZERO IF NONE
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 37
|
||
--- 1-OPS ---
|
||
|
||
130A A505 ZLOC: LDA ARG1+LO
|
||
130C 20181D JSR OBJLOC ; GET ADDR OF OBJECT INTO [I]
|
||
130F A004 LDY #4 ; POINT TO "LOC" SLOT
|
||
1311 B111 LDA (I),Y ; GET THE BYTE
|
||
1313 4CE810 JMP PUTBYT ; AND SHIP IT OUT
|
||
|
||
1316 ; ------
|
||
1316 ; PTSIZE
|
||
1316 ; ------
|
||
|
||
1316 ; RETURN LENGTH OF PROP TABLE [ARG1] IN BYTES
|
||
|
||
1316 A506 ZPTSIZ: LDA ARG1+HI ; MOVE ABS ADDR OF
|
||
1318 18 CLC ; THE PROP TABLE
|
||
1319 6526 ADC ZCODE ; INTO [I]
|
||
131B 8512 STA I+HI
|
||
|
||
131D A505 LDA ARG1+LO ; DECREMENT THE
|
||
131F 38 SEC ; ADDRESS
|
||
1320 E901 SBC #1 ; WHILE MOVING LSB
|
||
1322 8511 STA I+LO
|
||
1324 B002 BCS PTZ0
|
||
1326 C612 DEC I+HI
|
||
|
||
1328 A000 PTZ0: LDY #0 ; GET THE LENGTH
|
||
132A 20621D JSR PROPL ; OF PROPERTY AT [I] INTO [A]
|
||
|
||
132D 18 CLC
|
||
132E 6901 ADC #1 ; INCREMENT RESULT
|
||
1330 4CE810 JMP PUTBYT ; AND RETURN IT
|
||
|
||
1333 ; ---
|
||
1333 ; INC
|
||
1333 ; ---
|
||
|
||
1333 ; INCREMENT VARIABLE [ARG1]
|
||
|
||
1333 A505 ZINC: LDA ARG1+LO
|
||
1335 208110 JSR VARGET ; FETCH VARIABLE INTO [VALUE]
|
||
1338 20B611 JSR INCVAL ; INCREMENT IT
|
||
133B 4C4613 JMP ZD0
|
||
|
||
133E ; ---
|
||
133E ; DEC
|
||
133E ; ---
|
||
|
||
133E ; DECREMENT VARIABLE [ARG1]
|
||
|
||
133E A505 ZDEC: LDA ARG1+LO
|
||
1340 208110 JSR VARGET ; FETCH VAR INTO [VALUE]
|
||
1343 20AA11 JSR DECVAL ; DECREMENT IT
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 38
|
||
--- 1-OPS ---
|
||
|
||
|
||
1346 A505 ZD0: LDA ARG1+LO ; PUT RESULT BACK
|
||
1348 4CDD10 JMP VARPUT ; INTO THE SAME VARIABLE
|
||
|
||
134B ; ------
|
||
134B ; PRINTB
|
||
134B ; ------
|
||
|
||
134B ; PRINT Z-STRING AT [ARG1]
|
||
|
||
134B A505 ZPRB: LDA ARG1+LO
|
||
134D 8511 STA I+LO
|
||
134F A506 LDA ARG1+HI
|
||
1351 8512 STA I+HI
|
||
|
||
1353 20E11A JSR SETWRD ; MOVE Z-ADDR TO [MPC]
|
||
1356 4C0D1B JMP PZSTR ; AND PRINT
|
||
|
||
1359 ; ------
|
||
1359 ; REMOVE
|
||
1359 ; ------
|
||
|
||
1359 ; MOVE OBJECT [ARG1] INTO PSEUDO-OBJECT #0
|
||
|
||
1359 A505 ZREMOV: LDA ARG1+LO ; GET SOURCE OBJECT ADDR
|
||
135B 20181D JSR OBJLOC ; INTO [I]
|
||
|
||
135E A511 LDA I+LO ; COPY THE SOURCE ADDR
|
||
1360 8513 STA J+LO ; INTO [J]
|
||
1362 A512 LDA I+HI ; FOR LATER REFERENCE
|
||
1364 8514 STA J+HI
|
||
|
||
1366 A004 LDY #4 ; POINT TO "LOC" SLOT
|
||
1368 B111 LDA (I),Y ; GET THE DATA
|
||
136A F02E BEQ REMVEX ; SCRAM IF NO OBJECT
|
||
|
||
136C 20181D JSR OBJLOC ; ELSE GET ADDR OF OBJECT [A] INTO [I]
|
||
136F A006 LDY #6 ; POINT TO "FIRST" SLOT
|
||
1371 B111 LDA (I),Y ; GRAB DATA
|
||
1373 C505 CMP ARG1+LO ; IS THIS THE FIRST?
|
||
1375 D009 BNE REMVC1 ; NO, KEEP SEARCHING
|
||
|
||
1377 A005 LDY #5 ; ELSE COPY SOURCE'S "NEXT" SLOT
|
||
1379 B113 LDA (J),Y
|
||
137B C8 INY ; INTO DEST'S "FIRST" SLOT ([Y] = 6)
|
||
137C 9111 STA (I),Y
|
||
137E D011 BNE REMVC2 ; BRANCH ALWAYS
|
||
|
||
1380 20181D REMVC1: JSR OBJLOC
|
||
1383 A005 LDY #5 ; GET "NEXT"
|
||
1385 B111 LDA (I),Y
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 39
|
||
--- 1-OPS ---
|
||
|
||
1387 C505 CMP ARG1+LO ; FOUND IT?
|
||
1389 D0F5 BNE REMVC1 ; NO, KEEP TRYING
|
||
|
||
138B A005 LDY #5 ; WHEN FOUND
|
||
138D B113 LDA (J),Y ; MOVE "NEXT" SLOT OF SOURCE
|
||
138F 9111 STA (I),Y ; TO "NEXT" SLOT OF DEST
|
||
|
||
1391 A900 REMVC2: LDA #0
|
||
1393 A004 LDY #4 ; CLEAR "LOC"
|
||
1395 9113 STA (J),Y
|
||
1397 C8 INY ; AND "NEXT" SLOTS ([Y] = 5)
|
||
1398 9113 STA (J),Y ; OF SOURCE OBJECT
|
||
|
||
139A 60 REMVEX: RTS
|
||
|
||
139B ; ------
|
||
139B ; PRINTD
|
||
139B ; ------
|
||
|
||
139B ; PRINT SHORT DESCRIPTION OF OBJECT [ARG1]
|
||
|
||
139B A505 ZPRD: LDA ARG1+LO
|
||
|
||
139D ; ENTRY POINT FOR "USL"
|
||
|
||
139D 20181D PRNTDC: JSR OBJLOC ; GET ADDR OF OBJECT INTO [I]
|
||
13A0 A007 LDY #7 ; GET PROP TABLE POINTER
|
||
13A2 B111 LDA (I),Y ; FETCH MSB
|
||
13A4 AA TAX ; SAVE IT HERE
|
||
13A5 C8 INY
|
||
13A6 B111 LDA (I),Y ; FETCH LSB
|
||
13A8 8511 STA I+LO ; STORE LSB
|
||
13AA 8612 STX I+HI ; AND MSB
|
||
|
||
13AC E611 INC I+LO ; POINT PAST THE
|
||
13AE D002 BNE PDC0 ; LENGTH BYTE
|
||
13B0 E612 INC I+HI
|
||
|
||
13B2 20E11A PDC0: JSR SETWRD ; CALC Z-STRING ADDR
|
||
13B5 4C0D1B JMP PZSTR ; AND PRINT IT
|
||
|
||
13B8 ; ------
|
||
13B8 ; RETURN
|
||
13B8 ; ------
|
||
|
||
13B8 ; RETURN FROM "CALL" WITH VALUE [ARG1]
|
||
|
||
13B8 A518 ZRET: LDA OLDZSP ; RE-SYNC THE
|
||
13BA 8517 STA ZSP ; Z-STACK POINTER
|
||
|
||
13BC 20B010 JSR POPVAL ; POP # LOCALS INTO [X/A]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 40
|
||
--- 1-OPS ---
|
||
|
||
13BF 8612 STX I+HI ; SAVE HERE
|
||
|
||
13C1 ; MAKE SURE [X] WAS COMPLEMENT OF [A] (BM 11/24/84)
|
||
|
||
13C1 49FF EOR #$FF ; COMPLEMENT [A]
|
||
13C3 C512 CMP I+HI ; MATCHED?
|
||
13C5 D034 BNE STKERR ; ERROR IF NOT
|
||
|
||
13C7 8A TXA ; SET FLAGS; ANY LOCALS?
|
||
13C8 F019 BEQ RET2 ; SKIP IF NOT
|
||
|
||
13CA ; RESTORE PUSHED LOCALS
|
||
|
||
13CA CA DEX ; ZERO-ALIGN
|
||
13CB 8A TXA ; AND
|
||
13CC 0A ASL A ; WORD-ALIGN # LOCALS
|
||
13CD 8511 STA I+LO ; FOR USE AS A STORAGE INDEX
|
||
|
||
13CF 20B010 RET1: JSR POPVAL ; POP A LOCAL INTO [X/A]
|
||
|
||
13D2 A411 LDY I+LO ; RETRIEVE STORAGE INDEX
|
||
13D4 99010D STA LOCALS+HI,Y ; STORE MSB OF LOCAL
|
||
13D7 8A TXA ; MOVE LSB
|
||
13D8 99000D STA LOCALS+LO,Y ; AND STORE THAT TOO
|
||
|
||
13DB C611 DEC I+LO
|
||
13DD C611 DEC I+LO ; UPDATE STORAGE INDEX
|
||
|
||
13DF C612 DEC I+HI ; AND LOCALS COUNT
|
||
13E1 D0EC BNE RET1 ; POP TILL NO MORE LOCALS
|
||
|
||
13E3 ; RESTORE OTHER VARIABLES
|
||
|
||
13E3 20B010 RET2: JSR POPVAL ; POP [ZPCH] AND [ZPCM]
|
||
13E6 861A STX ZPCM
|
||
13E8 851B STA ZPCH
|
||
|
||
13EA 20B010 JSR POPVAL ; POP AND RESTORE
|
||
13ED 8618 STX OLDZSP
|
||
13EF 8519 STA ZPCL
|
||
|
||
13F1 A900 LDA #0
|
||
13F3 851C STA ZPCFLG ; ZPC CHANGED!
|
||
|
||
13F5 20BD11 JSR A12VAL ; MOVE [ARG1] TO [VALUE]
|
||
13F8 4CEE10 JMP PUTVAL ; AND RETURN IT
|
||
|
||
13FB ; *** ERROR #15: Z-STACK DESTROYED ***
|
||
|
||
13FB A90F STKERR: LDA #15 ; (BM 11/24/84)
|
||
13FD 4CC41D JMP ZERROR
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 41
|
||
--- 1-OPS ---
|
||
|
||
|
||
1400 ; ----
|
||
1400 ; JUMP
|
||
1400 ; ----
|
||
|
||
1400 ; JUMP TO Z-LOCATION IN [ARG1]
|
||
|
||
1400 20BD11 ZJUMP: JSR A12VAL ; MOVE [ARG1] TO [VALUE]
|
||
1403 4C7011 JMP PREDB3 ; A BRANCH THAT ALWAYS SUCCEEDS
|
||
|
||
1406 ; -----
|
||
1406 ; PRINT
|
||
1406 ; -----
|
||
|
||
1406 ; PRINT Z-STRING AT WORD POINTER [ARG1]
|
||
|
||
1406 A505 ZPRINT: LDA ARG1+LO
|
||
1408 8511 STA I+LO
|
||
140A A506 LDA ARG1+HI
|
||
140C 8512 STA I+HI
|
||
|
||
140E 20FB1A JSR SETSTR ; CALC STRING ADDRESS
|
||
1411 4C0D1B JMP PZSTR ; AND PRINT IT
|
||
|
||
1414 ; -----
|
||
1414 ; VALUE
|
||
1414 ; -----
|
||
|
||
1414 ; RETURN VALUE OF VARIABLE [ARG1]
|
||
|
||
1414 A505 ZVALUE: LDA ARG1+LO
|
||
1416 208110 JSR VARGET ; GET THE VALUE
|
||
1419 4CEE10 JMP PUTVAL ; EASY ENOUGH
|
||
|
||
141C ; ----
|
||
141C ; BCOM
|
||
141C ; ----
|
||
|
||
141C ; COMPLEMENT [ARG1]
|
||
|
||
141C A505 ZBCOM: LDA ARG1+LO
|
||
141E 49FF EOR #$FF
|
||
1420 AA TAX
|
||
1421 A506 LDA ARG1+HI
|
||
1423 49FF EOR #$FF
|
||
|
||
1425 ; FALL THROUGH ...
|
||
|
||
1425 ; ---------------------
|
||
1425 ; RETURN VALUE IN [X/A]
|
||
1425 ; ---------------------
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 42
|
||
--- 1-OPS ---
|
||
|
||
|
||
1425 860F VEXIT: STX VALUE+LO
|
||
1427 8510 STA VALUE+HI
|
||
1429 4CEE10 JMP PUTVAL
|
||
|
||
END
|
||
INCLUD OPS2.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 43
|
||
--- 2-OPS ---
|
||
|
||
|
||
142C ; -----
|
||
142C ; LESS?
|
||
142C ; -----
|
||
|
||
142C ; [ARG1] < [ARG2]?
|
||
|
||
142C 20BD11 ZLESS: JSR A12VAL ; MOVE [ARG1] TO [VALUE]
|
||
142F 4C3514 JMP DLS0 ; MOVE [ARG2] TO [I] & COMPARE
|
||
|
||
1432 ; ------
|
||
1432 ; DLESS?
|
||
1432 ; ------
|
||
|
||
1432 ; DECREMENT [ARG1]; SUCCEED IF < [ARG2]
|
||
|
||
1432 203E13 ZDLESS: JSR ZDEC ; MOVES ([ARG1]-1) TO [VALUE]
|
||
|
||
1435 A507 DLS0: LDA ARG2+LO ; MOVE [ARG2] TO [I]
|
||
1437 8511 STA I+LO
|
||
1439 A508 LDA ARG2+HI
|
||
143B 8512 STA I+HI
|
||
|
||
143D 4C5E14 JMP COMPAR ; COMPARE & RETURN
|
||
|
||
1440 ; -----
|
||
1440 ; GRTR?
|
||
1440 ; -----
|
||
|
||
1440 ; [ARG1] > [ARG2]?
|
||
|
||
1440 A505 ZGRTR: LDA ARG1+LO ; MOVE [ARG1] TO [I]
|
||
1442 8511 STA I+LO
|
||
1444 A506 LDA ARG1+HI
|
||
1446 8512 STA I+HI
|
||
|
||
1448 4C5614 JMP A2VAL ; MOVE [ARG2] TO [VALUE] & COMPARE
|
||
|
||
144B ; ------
|
||
144B ; IGRTR?
|
||
144B ; ------
|
||
|
||
144B ; INCREMENT [ARG1]; SUCCEED IF GREATER THAN [ARG2]
|
||
|
||
144B 203313 ZIGRTR: JSR ZINC ; GET ([ARG1]+1) INTO [VALUE]
|
||
|
||
144E A50F LDA VALUE+LO ; MOVE [VALUE] TO [I]
|
||
1450 8511 STA I+LO
|
||
1452 A510 LDA VALUE+HI
|
||
1454 8512 STA I+HI
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 44
|
||
--- 2-OPS ---
|
||
|
||
1456 A507 A2VAL: LDA ARG2+LO ; MOVE [ARG2] TO [VALUE]
|
||
1458 850F STA VALUE+LO
|
||
145A A508 LDA ARG2+HI
|
||
145C 8510 STA VALUE+HI
|
||
|
||
145E 206514 COMPAR: JSR SCOMP ; COMPARE [VALUE] AND [I]
|
||
1461 9038 BCC PGOOD
|
||
1463 B023 BCS PBAD
|
||
|
||
1465 ; -----------------
|
||
1465 ; SIGNED COMPARISON
|
||
1465 ; -----------------
|
||
|
||
1465 ; ENTRY: VALUES IN [VALUE] AND [I]
|
||
|
||
1465 A512 SCOMP: LDA I+HI
|
||
1467 4510 EOR VALUE+HI
|
||
1469 1005 BPL SCMP
|
||
146B A512 LDA I+HI
|
||
146D C510 CMP VALUE+HI
|
||
146F 60 RTS
|
||
|
||
1470 A510 SCMP: LDA VALUE+HI
|
||
1472 C512 CMP I+HI
|
||
1474 D004 BNE SCEX
|
||
1476 A50F LDA VALUE+LO
|
||
1478 C511 CMP I+LO
|
||
147A 60 SCEX: RTS
|
||
|
||
147B ; ---
|
||
147B ; IN?
|
||
147B ; ---
|
||
|
||
147B ; IS OBJECT [ARG1] CONTAINED IN OBJECT [ARG2]?
|
||
|
||
147B A505 ZIN: LDA ARG1+LO
|
||
147D 20181D JSR OBJLOC ; GET ADDR OF TARGET OBJECT INTO [I]
|
||
|
||
1480 A004 LDY #4 ; POINT TO "LOC" SLOT
|
||
1482 B111 LDA (I),Y ; GET DATA
|
||
1484 C507 CMP ARG2+LO ; IS IT THERE?
|
||
1486 F013 BEQ PGOOD ; YES, SUCCEED
|
||
|
||
1488 4C2A11 PBAD: JMP PREDF ; TOO BAD, CHUM ...
|
||
|
||
148B ; ----
|
||
148B ; BTST
|
||
148B ; ----
|
||
|
||
148B ; IS EVERY "ON" BIT IN [ARG1]
|
||
148B ; ALSO "ON" IN [ARG2]?
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 45
|
||
--- 2-OPS ---
|
||
|
||
|
||
148B A507 ZBTST: LDA ARG2+LO ; FIRST CHECK LSBS
|
||
148D 2505 AND ARG1+LO
|
||
148F C507 CMP ARG2+LO ; LSBS MATCH?
|
||
1491 D0F5 BNE PBAD ; NO, EXIT NOW
|
||
|
||
1493 A508 LDA ARG2+HI ; ELSE CHECK MSBS
|
||
1495 2506 AND ARG1+HI
|
||
1497 C508 CMP ARG2+HI ; MATCHED?
|
||
1499 D0ED BNE PBAD ; SORRY ...
|
||
|
||
149B 4C3611 PGOOD: JMP PREDS
|
||
|
||
149E ; ---
|
||
149E ; BOR
|
||
149E ; ---
|
||
|
||
149E ; RETURN [ARG1] "OR" [ARG2]
|
||
|
||
149E A505 ZBOR: LDA ARG1+LO
|
||
14A0 0507 ORA ARG2+LO
|
||
14A2 AA TAX
|
||
14A3 A506 LDA ARG1+HI
|
||
14A5 0508 ORA ARG2+HI
|
||
14A7 4C2514 JMP VEXIT
|
||
|
||
14AA ; ----
|
||
14AA ; BAND
|
||
14AA ; ----
|
||
|
||
14AA ; RETURN [ARG1] "AND" [ARG2]
|
||
|
||
14AA A505 ZBAND: LDA ARG1+LO
|
||
14AC 2507 AND ARG2+LO
|
||
14AE AA TAX
|
||
14AF A506 LDA ARG1+HI
|
||
14B1 2508 AND ARG2+HI
|
||
14B3 4C2514 JMP VEXIT
|
||
|
||
14B6 ; -----
|
||
14B6 ; FSET?
|
||
14B6 ; -----
|
||
|
||
14B6 ; IS FLAG [ARG1] SET IN OBJECT [ARG2]?
|
||
|
||
14B6 20741D ZFSETP: JSR FLAGSU ; GET BITS INTO [K] AND [J]
|
||
14B9 A516 LDA K+HI ; DO MSBS
|
||
14BB 2514 AND J+HI
|
||
14BD 8516 STA K+HI
|
||
|
||
14BF A515 LDA K+LO ; DO LSBS
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 46
|
||
--- 2-OPS ---
|
||
|
||
14C1 2513 AND J+LO
|
||
|
||
14C3 0516 ORA K+HI ; ANY BITS ON?
|
||
14C5 D0D4 BNE PGOOD ; TARGET BIT MUST BE ON
|
||
14C7 4C2A11 JMP PREDF
|
||
|
||
14CA ; ----
|
||
14CA ; FSET
|
||
14CA ; ----
|
||
|
||
14CA ; SET FLAG [ARG2] IN OBJECT [ARG1]
|
||
|
||
14CA 20741D ZFSET: JSR FLAGSU ; GET BITS INTO [K] & [J], ADDR IN [I]
|
||
|
||
14CD A000 LDY #0
|
||
14CF A516 LDA K+HI ; FIRST DO MSBS
|
||
14D1 0514 ORA J+HI
|
||
14D3 9111 STA (I),Y
|
||
|
||
14D5 C8 INY
|
||
14D6 A515 LDA K+LO ; THEN LSBS
|
||
14D8 0513 ORA J+LO
|
||
14DA 9111 STA (I),Y
|
||
14DC 60 RTS
|
||
|
||
14DD ; ------
|
||
14DD ; FCLEAR
|
||
14DD ; ------
|
||
|
||
14DD ; CLEAR FLAG [ARG2] IN OBJECT [ARG1]
|
||
|
||
14DD 20741D ZFCLR: JSR FLAGSU ; GETS BITS INTO [J] & [K], ADDR IN [I]
|
||
|
||
14E0 A000 LDY #0
|
||
14E2 A514 LDA J+HI ; FETCH MSB
|
||
14E4 49FF EOR #$FF ; COMPLEMENT IT
|
||
14E6 2516 AND K+HI ; RUB OUT FLAG
|
||
14E8 9111 STA (I),Y
|
||
|
||
14EA C8 INY
|
||
14EB A513 LDA J+LO ; SAME FOR LSB
|
||
14ED 49FF EOR #$FF
|
||
14EF 2515 AND K+LO
|
||
14F1 9111 STA (I),Y
|
||
14F3 60 RTS
|
||
|
||
14F4 ; ---
|
||
14F4 ; SET
|
||
14F4 ; ---
|
||
|
||
14F4 ; SET VARIABLE [ARG1] EQUAL TO [ARG2]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 47
|
||
--- 2-OPS ---
|
||
|
||
|
||
14F4 A507 ZSET: LDA ARG2+LO ; MOVE THE VALUE
|
||
14F6 850F STA VALUE+LO ; INTO [VALUE]
|
||
14F8 A508 LDA ARG2+HI
|
||
14FA 8510 STA VALUE+HI
|
||
|
||
14FC A505 LDA ARG1+LO ; GET VARIABLE ID
|
||
14FE 4CDD10 JMP VARPUT ; AND CHANGE THE VARIABLE
|
||
|
||
1501 ; ----
|
||
1501 ; MOVE
|
||
1501 ; ----
|
||
|
||
1501 ; MOVE OBJECT [ARG1] INTO OBJECT [ARG2]
|
||
|
||
1501 205913 ZMOVE: JSR ZREMOV ; REMOVE FIRST
|
||
|
||
1504 A505 LDA ARG1+LO
|
||
1506 20181D JSR OBJLOC ; GET SOURCE OBJECT ADDR INTO [I]
|
||
|
||
1509 A511 LDA I+LO ; COPY SOURCE ADDRESS
|
||
150B 8513 STA J+LO ; INTO [J]
|
||
150D A512 LDA I+HI
|
||
150F 8514 STA J+HI
|
||
|
||
1511 A507 LDA ARG2+LO ; GET DEST OBJECT ID
|
||
1513 A004 LDY #4 ; POINT TO "LOC" SLOT OF SOURCE
|
||
1515 9111 STA (I),Y ; AND MOVE IT IN
|
||
|
||
1517 20181D JSR OBJLOC ; GET ADDR OF DEST OBJECT INTO [I]
|
||
|
||
151A A006 LDY #6 ; POINT TO "FIRST" SLOT
|
||
151C B111 LDA (I),Y ; GET "FIRST" OF DEST
|
||
151E AA TAX ; SAVE HERE FOR A MOMENT
|
||
|
||
151F A505 LDA ARG1+LO ; GET SOURCE OBJECT ID
|
||
1521 9111 STA (I),Y ; MAKE IT "FIRST" OF DEST
|
||
|
||
1523 8A TXA ; RESTORE "FIRST" OF DEST
|
||
1524 F004 BEQ ZMVEX ; SCRAM IF ZERO
|
||
|
||
1526 A005 LDY #5 ; MAKE "FIRST" OF DEST
|
||
1528 9113 STA (J),Y ; THE "NEXT" OF SOURCE
|
||
|
||
152A 60 ZMVEX: RTS
|
||
|
||
152B ; ---
|
||
152B ; GET
|
||
152B ; ---
|
||
|
||
152B ; RETURN ITEM [ARG2] IN WORD-TABLE [ARG1]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 48
|
||
--- 2-OPS ---
|
||
|
||
|
||
152B 204015 ZGET: JSR WCALC ; CALC ADDRESS
|
||
152E 201A1A JSR GETBYT ; GET 1ST BYTE (MSB)
|
||
|
||
1531 8510 DOGET: STA VALUE+HI ; SAVE MSB
|
||
1533 201A1A JSR GETBYT ; GET LSB
|
||
1536 850F STA VALUE+LO ; SAVE AND
|
||
1538 4CEE10 JMP PUTVAL ; HAND IT OVER
|
||
|
||
153B ; ----
|
||
153B ; GETB
|
||
153B ; ----
|
||
|
||
153B ; RETURN ITEM [ARG2] IN BYTE-TABLE AT [ARG1]
|
||
|
||
153B 204415 ZGETB: JSR BCALC
|
||
153E F0F1 BEQ DOGET ; [A] = 0, SO CLEAR MSB OF [VALUE]
|
||
|
||
1540 ; --------------------
|
||
1540 ; CALC TABLE ADDRESSES
|
||
1540 ; --------------------
|
||
|
||
1540 ; WORD-ALIGNED ENTRY
|
||
|
||
1540 0607 WCALC: ASL ARG2+LO ; WORD-ALIGN FOR
|
||
1542 2608 ROL ARG2+HI ; WORD ACCESS
|
||
|
||
1544 ; BYTE-ALIGNED ENTRY
|
||
|
||
1544 A507 BCALC: LDA ARG2+LO ; ADD BASE ADDR OF TABLE
|
||
1546 18 CLC ; TO ITEM
|
||
1547 6505 ADC ARG1+LO ; INDEX
|
||
1549 851F STA MPCL
|
||
|
||
154B A508 LDA ARG2+HI ; SAME FOR MSBS
|
||
154D 6506 ADC ARG1+HI
|
||
154F 8520 STA MPCM
|
||
|
||
1551 A900 LDA #0
|
||
1553 8521 STA MPCH ; CLEAR TOP BIT
|
||
1555 8522 STA MPCFLG ; & INVALIDATE [MPC]
|
||
1557 60 RTS
|
||
|
||
1558 ; ----
|
||
1558 ; GETP
|
||
1558 ; ----
|
||
|
||
1558 ; RETURN PROPERTY [ARG2] OF OBJECT [ARG1];
|
||
1558 ; IF NO PROP [ARG2], RETURN [ARG2]'TH ELEMENT OF OBJECT #0
|
||
|
||
1558 20411D ZGETP: JSR PROPB
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 49
|
||
--- 2-OPS ---
|
||
|
||
|
||
155B 205D1D GETP1: JSR PROPN
|
||
155E C507 CMP ARG2+LO
|
||
1560 F01B BEQ GETP3
|
||
1562 9006 BCC GETP2
|
||
|
||
1564 206A1D JSR PROPNX
|
||
1567 4C5B15 JMP GETP1 ; TRY AGAIN WITH NEXT PROP
|
||
|
||
156A A507 GETP2: LDA ARG2+LO ; GET PROPERTY #
|
||
156C 38 SEC ; ZERO-ALIGN IT
|
||
156D E901 SBC #1
|
||
156F 0A ASL A ; WORD-ALIGN IT
|
||
1570 A8 TAY ; USE AS AN INDEX
|
||
1571 B135 LDA (OBJTAB),Y ; GET MSB OF PROPERTY
|
||
1573 8510 STA VALUE+HI
|
||
1575 C8 INY
|
||
1576 B135 LDA (OBJTAB),Y ; DO SAME WITH LSB
|
||
1578 850F STA VALUE+LO
|
||
157A 4CEE10 JMP PUTVAL ; RETURN DEFAULT IN [VALUE]
|
||
|
||
157D 20621D GETP3: JSR PROPL
|
||
1580 C8 INY ; MAKE [Y] POINT TO 1ST BYTE OF PROP
|
||
1581 AA TAX ; (SET FLAGS) IF LENGTH IN [A] = 0
|
||
1582 F009 BEQ GETPB ; GET A BYTE PROPERTY
|
||
1584 C901 CMP #1 ; IF LENGTH = 1
|
||
1586 F00B BEQ GETPW ; GET A WORD PROPERTY
|
||
|
||
1588 ; *** ERROR #7: PROPERTY LENGTH ***
|
||
|
||
1588 A907 LDA #7
|
||
158A 4CC41D JMP ZERROR
|
||
|
||
158D ; GET A 1-BYTE PROPERTY
|
||
|
||
158D B111 GETPB: LDA (I),Y ; GET LSB INTO [A]
|
||
158F A200 LDX #0 ; CLEAR MSB IN [X]
|
||
1591 F006 BEQ ETPEX
|
||
|
||
1593 ; GET A 2-BYTE PROPERTY
|
||
|
||
1593 B111 GETPW: LDA (I),Y ; GET MSB
|
||
1595 AA TAX ; INTO [X]
|
||
1596 C8 INY ; POINT TO LSB
|
||
1597 B111 LDA (I),Y ; GET IT INTO [A]
|
||
|
||
1599 850F ETPEX: STA VALUE+LO ; STORE LSB
|
||
159B 8610 STX VALUE+HI ; AND MSB
|
||
159D 4CEE10 JMP PUTVAL
|
||
|
||
15A0 ; -----
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 50
|
||
--- 2-OPS ---
|
||
|
||
15A0 ; GETPT
|
||
15A0 ; -----
|
||
|
||
15A0 ; RETURN POINTER TO PROP TABLE [ARG2]
|
||
15A0 ; IN OBJECT [ARG1]
|
||
|
||
15A0 20411D ZGETPT: JSR PROPB
|
||
|
||
15A3 205D1D GETPT1: JSR PROPN ; RETURNS OFFSET IN [Y]
|
||
15A6 C507 CMP ARG2+LO
|
||
15A8 F008 BEQ GETPT2
|
||
15AA 901E BCC DORET
|
||
15AC 206A1D JSR PROPNX ; TRY NEXT PROPERTY
|
||
15AF 4CA315 JMP GETPT1
|
||
|
||
15B2 E611 GETPT2: INC I+LO
|
||
15B4 D002 BNE GETPT3
|
||
15B6 E612 INC I+HI
|
||
|
||
15B8 98 GETPT3: TYA ; FETCH OFFSET
|
||
15B9 18 CLC
|
||
15BA 6511 ADC I+LO ; ADD LSB OF TABLE ADDRESS
|
||
15BC 850F STA VALUE+LO
|
||
|
||
15BE A512 LDA I+HI ; AND MSB
|
||
15C0 6900 ADC #0
|
||
15C2 38 SEC ; STRIP OFF
|
||
15C3 E526 SBC ZCODE ; RELATIVE POINTER
|
||
15C5 8510 STA VALUE+HI
|
||
15C7 4CEE10 JMP PUTVAL ; AND RETURN
|
||
|
||
15CA 4CE610 DORET: JMP RET0 ; ELSE RETURN A ZERO
|
||
|
||
15CD ; -----
|
||
15CD ; NEXTP
|
||
15CD ; -----
|
||
|
||
15CD ; RETURN INDEX # OF PROP FOLLOWING PROP [ARG2] IN OBJECT [ARG1];
|
||
15CD ; RETURN ZERO IF LAST; RETURN FIRST IF [ARG2]=0; ERROR IF NONE
|
||
|
||
15CD 20411D ZNEXTP: JSR PROPB
|
||
15D0 A507 LDA ARG2+LO ; IF [ARG2]=0
|
||
15D2 F012 BEQ NXTP3 ; RETURN "FIRST" SLOT
|
||
|
||
15D4 205D1D NXTP1: JSR PROPN ; FETCH PROPERTY #
|
||
15D7 C507 CMP ARG2+LO ; COMPARE TO TARGET #
|
||
15D9 F008 BEQ NXTP2 ; FOUND IT!
|
||
15DB 90ED BCC DORET ; LAST PROP, SO RETURN ZERO
|
||
15DD 206A1D JSR PROPNX ; ELSE TRY NEXT PROPERTY
|
||
15E0 4CD415 JMP NXTP1
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 51
|
||
--- 2-OPS ---
|
||
|
||
15E3 206A1D NXTP2: JSR PROPNX ; POINT TO FOLLOWING PROPERTY
|
||
|
||
15E6 205D1D NXTP3: JSR PROPN ; GET THE PROPERTY #
|
||
15E9 4CE810 JMP PUTBYT ; AND RETURN IT
|
||
|
||
15EC ; ---
|
||
15EC ; ADD
|
||
15EC ; ---
|
||
|
||
15EC ; RETURN [ARG1] + [ARG2]
|
||
|
||
15EC A505 ZADD: LDA ARG1+LO ; ADD LSBS
|
||
15EE 18 CLC
|
||
15EF 6507 ADC ARG2+LO
|
||
15F1 AA TAX ; SAVE LSB HERE
|
||
15F2 A506 LDA ARG1+HI ; ADD MSBS
|
||
15F4 6508 ADC ARG2+HI
|
||
15F6 4C2514 JMP VEXIT
|
||
|
||
15F9 ; ---
|
||
15F9 ; SUB
|
||
15F9 ; ---
|
||
|
||
15F9 ; RETURN [ARG1] - [ARG2]
|
||
|
||
15F9 A505 ZSUB: LDA ARG1+LO ; SUBTRACT LSBS
|
||
15FB 38 SEC
|
||
15FC E507 SBC ARG2+LO
|
||
15FE AA TAX ; SAVE LSB HERE
|
||
15FF A506 LDA ARG1+HI ; SUBTRACT MSBS
|
||
1601 E508 SBC ARG2+HI
|
||
1603 4C2514 JMP VEXIT ; EXIT WITH [X]=LSB, [A]=MSB
|
||
|
||
1606 ; ---
|
||
1606 ; MUL
|
||
1606 ; ---
|
||
|
||
1606 ; RETURN [ARG1] * [ARG2]
|
||
|
||
1606 20C016 ZMUL: JSR MINIT ; INIT THINGS
|
||
|
||
1609 665B ZMLOOP: ROR MTEMP+HI
|
||
160B 665A ROR MTEMP+LO
|
||
160D 6608 ROR ARG2+HI
|
||
160F 6607 ROR ARG2+LO
|
||
1611 900D BCC ZMNEXT
|
||
|
||
1613 A505 LDA ARG1+LO
|
||
1615 18 CLC
|
||
1616 655A ADC MTEMP+LO
|
||
1618 855A STA MTEMP+LO
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 52
|
||
--- 2-OPS ---
|
||
|
||
161A A506 LDA ARG1+HI
|
||
161C 655B ADC MTEMP+HI
|
||
161E 855B STA MTEMP+HI
|
||
|
||
1620 CA ZMNEXT: DEX
|
||
1621 10E6 BPL ZMLOOP
|
||
|
||
1623 A607 LDX ARG2+LO ; PUT LSB OF PRODUCT
|
||
1625 A508 LDA ARG2+HI ; AND MSB
|
||
1627 4C2514 JMP VEXIT ; WHERE "VEXIT" EXPECTS THEM
|
||
|
||
162A ; ---
|
||
162A ; DIV
|
||
162A ; ---
|
||
|
||
162A ; RETURN QUOTIENT OF [ARG1] / [ARG2]
|
||
|
||
162A 203E16 ZDIV: JSR DIVIDE
|
||
162D A656 LDX QUOT+LO
|
||
162F A557 LDA QUOT+HI
|
||
1631 4C2514 JMP VEXIT
|
||
|
||
1634 ; ---
|
||
1634 ; MOD
|
||
1634 ; ---
|
||
|
||
1634 ; RETURN REMAINDER OF [ARG1] / [ARG2]
|
||
|
||
1634 203E16 ZMOD: JSR DIVIDE
|
||
1637 A658 LDX REMAIN+LO ; FETCH THE REMAINDER
|
||
1639 A559 LDA REMAIN+HI ; IN [REMAIN]
|
||
163B 4C2514 JMP VEXIT ; AND RETURN IT
|
||
|
||
163E ; ---------------
|
||
163E ; SIGNED DIVISION
|
||
163E ; ---------------
|
||
|
||
163E ; ENTRY: DIVIDEND IN [ARG1], DIVISOR IN [ARG2]
|
||
163E ; EXIT: QUOTIENT IN [QUOT], REMAINDER IN [REMAIN]
|
||
|
||
163E A506 DIVIDE: LDA ARG1+HI ; SIGN OF REMAINDER
|
||
1640 855D STA RSIGN ; IS THE SIGN OF THE DIVIDEND
|
||
1642 4508 EOR ARG2+HI ; SIGN OF QUOTIENT IS POSITIVE
|
||
1644 855C STA QSIGN ; IF SIGNS OF TERMS ARE THE SAME
|
||
|
||
1646 A505 LDA ARG1+LO ; MOVE [ARG1] TO [QUOT]
|
||
1648 8556 STA QUOT+LO
|
||
164A A506 LDA ARG1+HI
|
||
164C 8557 STA QUOT+HI ; IF DIVIDEND IS POSITIVE
|
||
164E 1003 BPL ABSDIV ; MOVE DIVISOR
|
||
1650 207C16 JSR ABQUOT ; ELSE CALC ABS(DIVIDEND) FIRST
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 53
|
||
--- 2-OPS ---
|
||
|
||
|
||
1653 A507 ABSDIV: LDA ARG2+LO
|
||
1655 8558 STA REMAIN+LO
|
||
1657 A508 LDA ARG2+HI
|
||
1659 8559 STA REMAIN+HI ; IF REMAINDER IS POSITIVE
|
||
165B 1003 BPL GODIV ; WE'RE READY TO DIVIDE
|
||
165D 206E16 JSR ABREM ; ELSE CALC ABS(DIVISOR)
|
||
|
||
1660 208A16 GODIV: JSR UDIV ; DO UNSIGNED DIVIDE
|
||
|
||
1663 A55C LDA QSIGN ; SHOULD QUOTIENT BE FLIPPED?
|
||
1665 1003 BPL RFLIP ; NO, TEST REMAINDER
|
||
1667 207C16 JSR ABQUOT ; ELSE GET ABSOLUTE VALUE
|
||
|
||
166A A55D RFLIP: LDA RSIGN ; SHOULD EMAINDER BE FLIPPED?
|
||
166C 100D BPL DIVEX ; NO, WE'RE DONE
|
||
|
||
166E ; ELSE FALL THROUGH ...
|
||
|
||
166E ; ----------------
|
||
166E ; CALC ABS(REMAIN)
|
||
166E ; ----------------
|
||
|
||
166E A900 ABREM: LDA #0
|
||
1670 38 SEC
|
||
1671 E558 SBC REMAIN+LO
|
||
1673 8558 STA REMAIN+LO
|
||
1675 A900 LDA #0
|
||
1677 E559 SBC REMAIN+HI
|
||
1679 8559 STA REMAIN+HI
|
||
|
||
167B 60 DIVEX: RTS
|
||
|
||
167C ; --------------
|
||
167C ; CALC ABS(QUOT)
|
||
167C ; --------------
|
||
|
||
167C A900 ABQUOT: LDA #0
|
||
167E 38 SEC
|
||
167F E556 SBC QUOT+LO
|
||
1681 8556 STA QUOT+LO
|
||
1683 A900 LDA #0
|
||
1685 E557 SBC QUOT+HI
|
||
1687 8557 STA QUOT+HI
|
||
1689 60 RTS
|
||
|
||
168A ; -----------------
|
||
168A ; UNSIGNED DIVISION
|
||
168A ; -----------------
|
||
|
||
168A ; ENTRY: DIVIDEND IN [QUOT], DIVISOR IN [REMAIN]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 54
|
||
--- 2-OPS ---
|
||
|
||
168A ; EXIT: QUOTIENT IN [QUOT], REMAINDER IN [REMAIN]
|
||
|
||
168A A558 UDIV: LDA REMAIN+LO ; CHECK [REMAIN]
|
||
168C 0559 ORA REMAIN+HI ; BEFORE PROCEEDING
|
||
168E F02B BEQ DIVERR ; CAN'T DIVIDE BY ZERO!
|
||
|
||
1690 20C016 JSR MINIT ; SET IT ALL UP
|
||
|
||
1693 2656 UDLOOP: ROL QUOT+LO
|
||
1695 2657 ROL QUOT+HI
|
||
1697 265A ROL MTEMP+LO
|
||
1699 265B ROL MTEMP+HI
|
||
|
||
169B A55A LDA MTEMP+LO
|
||
169D 38 SEC
|
||
169E E558 SBC REMAIN+LO
|
||
16A0 A8 TAY ; SAVE HERE
|
||
16A1 A55B LDA MTEMP+HI
|
||
16A3 E559 SBC REMAIN+HI
|
||
16A5 9004 BCC UDNEXT
|
||
16A7 845A STY MTEMP+LO
|
||
16A9 855B STA MTEMP+HI
|
||
|
||
16AB CA UDNEXT: DEX
|
||
16AC D0E5 BNE UDLOOP
|
||
|
||
16AE 2656 ROL QUOT+LO ; SHIFT LAST CARRY FOR QUOTIENT
|
||
16B0 2657 ROL QUOT+HI
|
||
|
||
16B2 A55A LDA MTEMP+LO ; MOVE REMAINDER
|
||
16B4 8558 STA REMAIN+LO ; INTO [REMAIN]
|
||
16B6 A55B LDA MTEMP+HI
|
||
16B8 8559 STA REMAIN+HI
|
||
16BA 60 RTS
|
||
|
||
16BB ; *** ERROR #8: DIVISION BY ZERO ***
|
||
|
||
16BB A908 DIVERR: LDA #8
|
||
16BD 4CC41D JMP ZERROR
|
||
|
||
16C0 ; ---------
|
||
16C0 ; MATH INIT
|
||
16C0 ; ---------
|
||
|
||
16C0 A210 MINIT: LDX #16 ; INIT LOOPING INDEX
|
||
16C2 A900 LDA #0
|
||
16C4 855A STA MTEMP+LO ; CLEAR TEMP
|
||
16C6 855B STA MTEMP+HI ; REGISTER
|
||
16C8 18 CLC ; AND CARRY
|
||
16C9 60 RTS
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 55
|
||
--- 2-OPS ---
|
||
|
||
END
|
||
INCLUD OPSX.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 56
|
||
--- X-OPS ---
|
||
|
||
|
||
16CA ; ------
|
||
16CA ; EQUAL?
|
||
16CA ; ------
|
||
|
||
16CA ; IS [ARG1] = [ARG2] (OR [ARG3] OR [ARG4])?
|
||
|
||
16CA C604 ZEQUAL: DEC NARGS ; DOUBLE-CHECK # ARGS
|
||
16CC D005 BNE DOEQ ; MUST BE AT LEAST TWO, OR ...
|
||
|
||
16CE ; *** ERROR #9: NOT ENOUGH "EQUAL?" ARGS ***
|
||
|
||
16CE A909 LDA #9
|
||
16D0 4CC41D JMP ZERROR
|
||
|
||
16D3 A505 DOEQ: LDA ARG1+LO ; FETCH LSB
|
||
16D5 A606 LDX ARG1+HI ; AND MSB OF [ARG1]
|
||
|
||
16D7 C507 CMP ARG2+LO ; TEST LSB OF [ARG2]
|
||
16D9 D004 BNE TRY2 ; NO GOOD, LOOK FOR ANOTHER ARG
|
||
16DB E408 CPX ARG2+HI ; ELSE TRY MSB OF [ARG2]
|
||
16DD F018 BEQ EQOK ; MATCHED!
|
||
|
||
16DF C604 TRY2: DEC NARGS ; OUT OF ARGS YET?
|
||
16E1 F017 BEQ EQBAD ; YES, WE FAILED
|
||
|
||
16E3 C509 CMP ARG3+LO ; TRY LSB OF [ARG3]
|
||
16E5 D004 BNE TRY3 ; NO GOOD, LOOK FOR ANOTHER ARG
|
||
16E7 E40A CPX ARG3+HI ; HOW ABOUT MSB OF [ARG3]?
|
||
16E9 F00C BEQ EQOK ; YAY!
|
||
|
||
16EB C604 TRY3: DEC NARGS ; OUT OF ARGS YET?
|
||
16ED F00B BEQ EQBAD ; IF NOT ...
|
||
|
||
16EF C50B CMP ARG4+LO ; TRY [ARG4]
|
||
16F1 D007 BNE EQBAD ; SORRY, CHUM
|
||
16F3 E40C CPX ARG4+HI ; MSB MATCHED?
|
||
16F5 D003 BNE EQBAD ; TOO BAD
|
||
|
||
16F7 4C3611 EQOK: JMP PREDS ; FINALLY MATCHED!
|
||
|
||
16FA 4C2A11 EQBAD: JMP PREDF ; FAILURE (SNIFF!)
|
||
|
||
16FD ; ----
|
||
16FD ; CALL
|
||
16FD ; ----
|
||
|
||
16FD ; BRANCH TO FUNCTION AT ([ARG1]*2), PASSING
|
||
16FD ; OPTIONAL PARAMETERS IN [ARG2]-[ARG4]
|
||
|
||
16FD A505 ZCALL: LDA ARG1+LO
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 57
|
||
--- X-OPS ---
|
||
|
||
16FF 0506 ORA ARG1+HI ; IS CALL ADDRESS ZERO?
|
||
1701 D003 BNE DOCALL ; NO, CONTINUE
|
||
|
||
1703 4CE810 JMP PUTBYT ; ELSE RETURN THE ZERO IN [A]
|
||
|
||
1706 A618 DOCALL: LDX OLDZSP ; SAVE OLD STACK POINTER
|
||
1708 A519 LDA ZPCL ; AND LSB OF [ZPC]
|
||
170A 20CA10 JSR PUSHXA ; ON THE Z-STACK
|
||
|
||
170D A61A LDX ZPCM ; SAVE MIDDLE 8 BITS
|
||
170F A51B LDA ZPCH ; AND TOP BIT OF [ZPC]
|
||
1711 20CA10 JSR PUSHXA ; AS WELL
|
||
|
||
1714 ; FORM 16-BIT ADDRESS FROM [ARG1]
|
||
|
||
1714 A900 LDA #0 ; CLEAR HIGH BIT FOR ROTATE
|
||
1716 851C STA ZPCFLG ; AND INVALIDATE [ZPC]
|
||
|
||
1718 0605 ASL ARG1+LO ; MULTIPLY [ARG1]
|
||
171A 2606 ROL ARG1+HI ; BY TWO
|
||
171C 2A ROL A ; HIGH BIT INTO [A]
|
||
171D 851B STA ZPCH ; NEW HIGH BIT OF [ZPC]
|
||
|
||
171F A506 LDA ARG1+HI ; GET NEW LOW BYTES
|
||
1721 851A STA ZPCM
|
||
1723 A505 LDA ARG1+LO
|
||
1725 8519 STA ZPCL
|
||
|
||
1727 20E419 JSR NEXTPC ; FETCH # LOCALS TO PASS
|
||
172A 8513 STA J+LO ; SAVE HERE FOR COUNTING
|
||
172C 8514 STA J+HI ; AND HERE FOR LATER REFERENCE
|
||
172E F02B BEQ ZCALL2 ; SKIP IF NO LOCALS
|
||
|
||
1730 A900 LDA #0
|
||
1732 8511 STA I+LO ; ELSE INIT STORAGE INDEX
|
||
|
||
1734 A411 ZCALL1: LDY I+LO
|
||
1736 BE000D LDX LOCALS+LO,Y ; GET LSB OF LOCAL INTO [X]
|
||
1739 B9010D LDA LOCALS+HI,Y ; AND MSB INTO [A]
|
||
173C 8411 STY I+LO ; SAVE THE INDEX
|
||
173E 20CA10 JSR PUSHXA ; PUSH LOCAL IN [X/A] ONTO Z-STACK
|
||
|
||
1741 20E419 JSR NEXTPC ; GET MSB OF NEW LOCAL
|
||
1744 8512 STA I+HI ; SAVE IT HERE
|
||
1746 20E419 JSR NEXTPC ; NOW GET LSB
|
||
|
||
1749 A411 LDY I+LO ; RESTORE INDEX
|
||
174B 99000D STA LOCALS+LO,Y ; STORE LSB INTO [LOCALS]
|
||
174E A512 LDA I+HI ; RETRIEVE MSB
|
||
1750 99010D STA LOCALS+HI,Y ; STORE IT INTO [LOCALS]
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 58
|
||
--- X-OPS ---
|
||
|
||
1753 C8 INY
|
||
1754 C8 INY ; UPDATE
|
||
1755 8411 STY I+LO ; THE STORAGE INDEX
|
||
|
||
1757 C613 DEC J+LO ; ANY MORE LOCALS?
|
||
1759 D0D9 BNE ZCALL1 ; YES, KEEP LOOPING
|
||
|
||
175B ; MOVE UP TO 3 ARGUMENTS TO [LOCALS]
|
||
|
||
175B C604 ZCALL2: DEC NARGS ; EXTRA ARGS IN THIS CALL?
|
||
175D F026 BEQ ZCALL3 ; NO, CONTINUE
|
||
|
||
175F A507 LDA ARG2+LO ; MOVE [ARG2] TO LOCAL #1
|
||
1761 8D000D STA LOCALS+LO
|
||
1764 A508 LDA ARG2+HI
|
||
1766 8D010D STA LOCALS+HI
|
||
|
||
1769 C604 DEC NARGS ; ANY LEFT?
|
||
176B F018 BEQ ZCALL3 ; NO, SCRAM
|
||
|
||
176D A509 LDA ARG3+LO ; MOVE [ARG3] TO LOCAL #2
|
||
176F 8D020D STA LOCALS+LO+2
|
||
1772 A50A LDA ARG3+HI
|
||
1774 8D030D STA LOCALS+HI+2
|
||
|
||
1777 C604 DEC NARGS ; ANY LEFT?
|
||
1779 F00A BEQ ZCALL3 ; NO, EXUENT
|
||
|
||
177B A50B LDA ARG4+LO ; MOVE [ARG4] TO LOCAL #3
|
||
177D 8D040D STA LOCALS+LO+4
|
||
1780 A50C LDA ARG4+HI
|
||
1782 8D050D STA LOCALS+HI+4
|
||
|
||
1785 A614 ZCALL3: LDX J+HI ; RETRIEVE # LOCALS
|
||
1787 8A TXA ; DUPE INTO [A]
|
||
1788 49FF EOR #$FF ; COMPLEMENT FOR ERROR CHECK (BM 11/24/84)
|
||
178A 20CA10 JSR PUSHXA ; PUSH # LOCALS ONTO Z-STACK
|
||
|
||
178D A517 LDA ZSP ; REMEMBER WHERE
|
||
178F 8518 STA OLDZSP ; WE CAME FROM
|
||
|
||
1791 60 RTS ; WHEW!
|
||
|
||
1792 ; ---
|
||
1792 ; PUT
|
||
1792 ; ---
|
||
|
||
1792 ; SET ITEM [ARG2] IN WORD-TABLE [ARG1] EQUAL TO [ARG3]
|
||
|
||
1792 0607 ZPUT: ASL ARG2+LO ; WORD-ALIGN [ARG2]
|
||
1794 2608 ROL ARG2+HI
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 59
|
||
--- X-OPS ---
|
||
|
||
|
||
1796 20A817 JSR PCALC ; GET ITEM ADDR INTO [I]
|
||
1799 A50A LDA ARG3+HI ; STORE MSB OF [ARG3]
|
||
179B 9111 STA (I),Y ; INTO MSB OF TABLE POSITION
|
||
179D C8 INY ; POINT TO LSB
|
||
179E D003 BNE PUTLSB ; BRANCH ALWAYS
|
||
|
||
17A0 ; ----
|
||
17A0 ; PUTB
|
||
17A0 ; ----
|
||
|
||
17A0 ; SET ITEM [ARG2] IN BYTE-TABLE [ARG1] EQUAL TO [ARG3]
|
||
|
||
17A0 20A817 ZPUTB: JSR PCALC
|
||
|
||
17A3 ; ENTRY FOR "PUT"
|
||
|
||
17A3 A509 PUTLSB: LDA ARG3+LO ; GET LSB OF [ARG3]
|
||
17A5 9111 STA (I),Y ; STORE IN TABLE AT [Y]
|
||
17A7 60 RTS
|
||
|
||
17A8 ; ---------------------------
|
||
17A8 ; CALC ITEM ADDRESS FOR "PUT"
|
||
17A8 ; ---------------------------
|
||
|
||
17A8 A507 PCALC: LDA ARG2+LO ; ADD ITEM OFFSET IN [ARG2]
|
||
17AA 18 CLC ; TO TABLE ADDR IN [ARG1]
|
||
17AB 6505 ADC ARG1+LO ; TO FORM A POINTER
|
||
17AD 8511 STA I+LO ; IN [I]
|
||
|
||
17AF A508 LDA ARG2+HI ; SAME FOR MSB
|
||
17B1 6506 ADC ARG1+HI
|
||
17B3 18 CLC
|
||
17B4 6526 ADC ZCODE ; MAKE IT ABSOLUTE
|
||
17B6 8512 STA I+HI
|
||
|
||
17B8 A000 LDY #0 ; ZERO FOR INDEXING
|
||
17BA 60 RTS
|
||
|
||
17BB ; ----
|
||
17BB ; PUTP
|
||
17BB ; ----
|
||
|
||
17BB ; SET PROPERTY [ARG2] IN OBJECT [ARG1] EQUAL TO [ARG3]
|
||
|
||
17BB 20411D ZPUTP: JSR PROPB
|
||
|
||
17BE 205D1D PUTP1: JSR PROPN
|
||
17C1 C507 CMP ARG2+LO
|
||
17C3 F008 BEQ PUTP2
|
||
17C5 901B BCC PNERR ; ERROR IF LOWER
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 60
|
||
--- X-OPS ---
|
||
|
||
|
||
17C7 206A1D JSR PROPNX ; TRY NEXT PROPERTY
|
||
17CA 4CBE17 JMP PUTP1
|
||
|
||
17CD 20621D PUTP2: JSR PROPL
|
||
17D0 C8 INY ; MAKE [Y] POINT TO 1ST PROPERTY BYTE
|
||
17D1 AA TAX ; (SET FLAGS) IF LENGTH IN [A] = 0
|
||
17D2 F009 BEQ PUTP3 ; PUT A BYTE
|
||
17D4 C901 CMP #1 ; PUT A WORD IF [A] = 1
|
||
17D6 D00F BNE PLERR ; ELSE LENGTH IS BAD
|
||
|
||
17D8 A50A LDA ARG3+HI ; GET MSB OF PROPERTY
|
||
17DA 9111 STA (I),Y ; AND STORE IN OBJECT
|
||
17DC C8 INY ; POINT TO LSB SLOT
|
||
|
||
17DD A509 PUTP3: LDA ARG3+LO ; FETCH LSB
|
||
17DF 9111 STA (I),Y ; AND STORE IN OBJECT
|
||
17E1 60 RTS
|
||
|
||
17E2 ; *** ERROR #10: BAD PROPERTY NUMBER ***
|
||
|
||
17E2 A90A PNERR: LDA #10
|
||
17E4 4CC41D JMP ZERROR
|
||
|
||
17E7 ; *** ERROR #11: PUTP PROPERTY LENGTH ***
|
||
|
||
17E7 A90B PLERR: LDA #11
|
||
17E9 4CC41D JMP ZERROR
|
||
|
||
17EC ; ------
|
||
17EC ; PRINTC
|
||
17EC ; ------
|
||
|
||
17EC ; PRINT CHAR WITH ASCII VALUE IN [ARG1]
|
||
|
||
17EC A505 ZPRC: LDA ARG1+LO ; GRAB THE CHAR
|
||
17EE 4C451E JMP COUT ; AND SHIP IT OUT
|
||
|
||
17F1 ; ------
|
||
17F1 ; PRINTN
|
||
17F1 ; ------
|
||
|
||
17F1 ; PRINT VALUE OF [ARG1] AS A SIGNED INTEGER
|
||
|
||
17F1 A505 ZPRN: LDA ARG1+LO ; MOVE [ARG1] TO [QUOT]
|
||
17F3 8556 STA QUOT+LO
|
||
17F5 A506 LDA ARG1+HI
|
||
17F7 8557 STA QUOT+HI
|
||
|
||
17F9 ; PRINT [QUOT]
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 61
|
||
--- X-OPS ---
|
||
|
||
17F9 A557 NUMBER: LDA QUOT+HI ; IF VALUE IS POSITIVE
|
||
17FB 1008 BPL DIGCNT ; CONTINUE
|
||
|
||
17FD A92D LDA #$2D ; ELSE START WITH A MINUS SIGN
|
||
17FF 20451E JSR COUT
|
||
|
||
1802 207C16 JSR ABQUOT ; AND CALC ABS([QUOT])
|
||
|
||
1805 ; COUNT # OF DECIMAL DIGITS
|
||
|
||
1805 A900 DIGCNT: LDA #0 ; RESET
|
||
1807 855E STA DIGITS ; DIGIT INDEX
|
||
|
||
1809 A556 DGC: LDA QUOT+LO ; IS QUOTIENT
|
||
180B 0557 ORA QUOT+HI ; ZERO YET?
|
||
180D F012 BEQ PRNTN3 ; YES, READY TO PRINT
|
||
|
||
180F A90A LDA #10 ; ELSE DIVIDE [QUOT]
|
||
1811 8558 STA REMAIN+LO ; BY 10 (LSB)
|
||
1813 A900 LDA #0
|
||
1815 8559 STA REMAIN+HI ; 10 (MSB)
|
||
|
||
1817 208A16 JSR UDIV ; UNSIGNED DIVIDE
|
||
|
||
181A A558 LDA REMAIN+LO ; FETCH LSB OF REMAINDER (THE DIGIT)
|
||
181C 48 PHA ; SAVE IT ON STACK
|
||
181D E65E INC DIGITS ; UPDATE DIGIT COUNT
|
||
181F D0E8 BNE DGC ; LOOP TILL QUOTIENT=0
|
||
|
||
1821 A55E PRNTN3: LDA DIGITS ; IF DIGIT COUNT IS NZ
|
||
1823 D005 BNE PRNTN4 ; CONTINUE
|
||
|
||
1825 A930 LDA #'0' ; ELSE PRINT "0"
|
||
1827 4C451E JMP COUT ; AND RETURN
|
||
|
||
182A 68 PRNTN4: PLA ; PULL A DIGIT OFF THE STACK
|
||
182B 18 CLC
|
||
182C 6930 ADC #'0' ; CONVERT TO ASCII
|
||
182E 20451E JSR COUT ; AND PRINT IT
|
||
1831 C65E DEC DIGITS ; OUT OF DIGITS YET?
|
||
1833 D0F5 BNE PRNTN4 ; NO, KEEP LOOPING
|
||
1835 60 RTS
|
||
|
||
1836 ; ------
|
||
1836 ; RANDOM
|
||
1836 ; ------
|
||
|
||
1836 ; RETURN A RANDOM VALUE BETWEEN 0 AND [ARG1]
|
||
|
||
1836 A505 ZRAND: LDA ARG1+LO ; MAKE [ARG1] THE DIVISOR
|
||
1838 8507 STA ARG2+LO
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 62
|
||
--- X-OPS ---
|
||
|
||
183A A506 LDA ARG1+HI
|
||
183C 8508 STA ARG2+HI
|
||
|
||
183E 203E1E JSR RANDOM ; GET RANDOM BYTES INTO [A] AND [X]
|
||
1841 8605 STX ARG1+LO ; MAKE THEM THE DIVIDEND
|
||
1843 297F AND #$7F ; MAKE SURE MSB IS POSITIVE
|
||
1845 8506 STA ARG1+HI
|
||
|
||
1847 203E16 JSR DIVIDE ; SIGNED DIVIDE, [ARG1] / [ARG2]
|
||
|
||
184A A558 LDA REMAIN+LO ; MOVE REMAINDER
|
||
184C 850F STA VALUE+LO ; INTO [VALUE]
|
||
184E A559 LDA REMAIN+HI
|
||
1850 8510 STA VALUE+HI
|
||
|
||
1852 20B611 JSR INCVAL ; INCREMENT [VALUE]
|
||
1855 4CEE10 JMP PUTVAL ; AND RETURN RESULT
|
||
|
||
1858 ; ----
|
||
1858 ; PUSH
|
||
1858 ; ----
|
||
|
||
1858 ; PUSH [ARG1] ONTO THE Z-STACK
|
||
|
||
1858 A605 ZPUSH: LDX ARG1+LO
|
||
185A A506 LDA ARG1+HI
|
||
185C 4CCA10 JMP PUSHXA
|
||
|
||
185F ; ---
|
||
185F ; POP
|
||
185F ; ---
|
||
|
||
185F ; POP WORD OFF Z-STACK, STORE IN VARIABLE [ARG1]
|
||
|
||
185F 20B010 ZPOP: JSR POPVAL ; VALUE INTO [VALUE]
|
||
1862 A505 LDA ARG1+LO ; GET VARIABLE ID
|
||
1864 4CDD10 JMP VARPUT ; AND CHANGE THE VARIABLE
|
||
|
||
END
|
||
INCLUD READ.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 63
|
||
--- READ HANDLER ---
|
||
|
||
|
||
1867 ; ----
|
||
1867 ; READ
|
||
1867 ; ----
|
||
|
||
1867 ; READ LINE INTO TABLE [ARG1]; PARSE INTO TABLE [ARG2]
|
||
|
||
1867 20081F ZREAD: JSR ZUSL ; UPDATE THE STATUS LINE
|
||
|
||
186A A506 LDA ARG1+HI ; MAKE THE TABLE ADDRESSES
|
||
186C 18 CLC ; ABSOLUTE
|
||
186D 6526 ADC ZCODE ; LSBS NEED NOT CHANGE
|
||
186F 8506 STA ARG1+HI
|
||
|
||
1871 A508 LDA ARG2+HI
|
||
1873 18 CLC
|
||
1874 6526 ADC ZCODE
|
||
1876 8508 STA ARG2+HI
|
||
|
||
1878 208D21 JSR INPUT ; READ LINE; RETURN LENGTH IN [A]
|
||
187B 8545 STA LINLEN ; SAVE # CHARS IN LINE
|
||
|
||
187D A900 LDA #0
|
||
187F 8546 STA WRDLEN ; INIT # CHARS IN WORD COUNTER
|
||
|
||
1881 A001 LDY #1 ; POINT TO "# WORDS READ" SLOT
|
||
1883 9107 STA (ARG2),Y ; AND CLEAR IT ([A] = 0)
|
||
|
||
1885 8443 STY SOURCE ; INIT SOURCE TABLE PNTR ([Y] = 1)
|
||
1887 C8 INY ; = 2
|
||
1888 8444 STY RESULT ; AND RESULT TABLE POINTER
|
||
|
||
188A ; MAIN LOOP STARTS HERE
|
||
|
||
188A A000 READL: LDY #0 ; POINT TO "MAX WORDS" SLOT
|
||
188C B107 LDA (ARG2),Y ; AND READ IT
|
||
188E F004 BEQ RLERR ; PATCH IF ZERO
|
||
1890 C93C CMP #60 ; OKAY IF < 60
|
||
1892 9004 BCC RL0
|
||
|
||
1894 A93B RLERR: LDA #59 ; MAXIMUM VALUE IS 59 (BM 5/14/85)
|
||
1896 9107 STA (ARG2),Y
|
||
|
||
1898 C8 RL0: INY ; POINT TO "# WORDS READ" SLOT
|
||
1899 D107 CMP (ARG2),Y ; TOO MANY WORDS?
|
||
189B 9006 BCC RLEX ; EXIT IF SO (BM 5/1/85)
|
||
|
||
189D A545 RL1: LDA LINLEN
|
||
189F 0546 ORA WRDLEN ; OUT OF CHARS AND WORDS?
|
||
18A1 D001 BNE RL2 ; NOT YET
|
||
18A3 60 RLEX: RTS ; ELSE EXIT
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 64
|
||
--- READ HANDLER ---
|
||
|
||
|
||
18A4 A546 RL2: LDA WRDLEN ; GET WORD LENGTH
|
||
18A6 C906 CMP #6 ; 6 CHARS DONE?
|
||
18A8 9003 BCC RL3 ; NO, KEEP GOING
|
||
18AA 203B19 JSR FLUSHW ; ELSE FLUSH REMAINDER OF WORD
|
||
|
||
18AD A546 RL3: LDA WRDLEN ; GET WORD LENGTH AGAIN
|
||
18AF D024 BNE READL2 ; CONTINUE IF NOT FIRST CHAR
|
||
|
||
18B1 ; START A NEW WORD
|
||
|
||
18B1 A205 LDX #5 ; CLEAR Z-WORD INPUT BUFFER
|
||
18B3 9537 RLL: STA IN,X ; [A] = 0
|
||
18B5 CA DEX
|
||
18B6 10FB BPL RLL
|
||
|
||
18B8 202D19 JSR EFIND ; GET BASE ADDRESS INTO [ENTRY]
|
||
18BB A543 LDA SOURCE ; STORE THE START POS OF THE WORD
|
||
18BD A003 LDY #3 ; INTO THE "WORD START" SLOT
|
||
18BF 9147 STA (ENTRY),Y ; OF THE RESULT TABLE
|
||
|
||
18C1 A8 TAY
|
||
18C2 B105 LDA (ARG1),Y ; GET A CHAR FROM SOURCE BUFFER
|
||
18C4 206819 JSR SIB ; IS IT A SELF-INSERTING BREAK?
|
||
18C7 B026 BCS DOSIB ; YES IF CARRY WAS SET
|
||
|
||
18C9 205619 JSR NORM ; IS IT A "NORMAL" BREAK?
|
||
18CC 9007 BCC READL2 ; NO, CONTINUE
|
||
|
||
18CE E643 INC SOURCE ; ELSE FLUSH THE STRANDED BREAK
|
||
18D0 C645 DEC LINLEN ; UPDATE # CHARS LEFT IN LINE
|
||
18D2 4C8A18 JMP READL ; AND LOOP
|
||
|
||
18D5 A545 READL2: LDA LINLEN ; OUT OF CHARS YET?
|
||
18D7 F01E BEQ READL3 ; LOOKS THAT WAY
|
||
|
||
18D9 A443 LDY SOURCE
|
||
18DB B105 LDA (ARG1),Y ; ELSE GRAB NEXT CHAR
|
||
18DD 205119 JSR BREAK ; IS IT A BREAK?
|
||
18E0 B015 BCS READL3 ; YES IF CARRY WAS SET
|
||
|
||
18E2 A646 LDX WRDLEN ; ELSE STORE THE CHAR
|
||
18E4 9537 STA IN,X ; INTO THE INPUT BUFFER
|
||
|
||
18E6 C645 DEC LINLEN ; ONE LESS CHAR IN LINE
|
||
18E8 E646 INC WRDLEN ; ONE MORE IN WORD
|
||
18EA E643 INC SOURCE ; POINT TO NEXT CHAR IN SOURCE
|
||
18EC 4C8A18 JMP READL ; AND LOOP BACK
|
||
|
||
18EF 8537 DOSIB: STA IN ; PUT THE BREAK INTO 1ST WORD SLOT
|
||
18F1 C645 DEC LINLEN ; ONE LESS CHAR IN LINE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 65
|
||
--- READ HANDLER ---
|
||
|
||
18F3 E646 INC WRDLEN ; ONE MORE IN WORD BUFFER
|
||
18F5 E643 INC SOURCE ; POINT TO NEXT SOURCE CHAR
|
||
|
||
18F7 A546 READL3: LDA WRDLEN ; ANY CHARS IN WORD YET?
|
||
18F9 F08F BEQ READL ; APPARENTLY NOT, SO LOOP BACK
|
||
|
||
18FB 202D19 JSR EFIND ; GET ENTRY ADDR INTO [ENTRY]
|
||
18FE A546 LDA WRDLEN ; GET ACTUAL LNGTH OF WORD
|
||
1900 A002 LDY #2 ; STORE IT IN "WORD LENGTH" SLOT
|
||
1902 9147 STA (ENTRY),Y ; OF THE CURRENT ENTRY
|
||
|
||
1904 20291C JSR CONZST ; CONVERT ASCII IN [IN] TO Z-STRING
|
||
1907 207A19 JSR FINDW ; AND LOOK IT UP IN VOCABULARY
|
||
|
||
190A A001 LDY #1
|
||
190C B107 LDA (ARG2),Y ; FETCH THE # WORDS READ
|
||
190E 18 CLC
|
||
190F 6901 ADC #1 ; INCREMENT IT
|
||
1911 9107 STA (ARG2),Y ; AND UPDATE
|
||
|
||
1913 202D19 JSR EFIND ; MAKE [ENTRY] POINT TO ENTRY
|
||
|
||
1916 A000 LDY #0
|
||
1918 8446 STY WRDLEN ; CLEAR # CHARS IN WORD
|
||
191A A510 LDA VALUE+HI ; GET MSB OF VOCAB ENTRY ADDRESS
|
||
191C 9147 STA (ENTRY),Y ; AND STORE IN 1ST SLOT OF ENTRY
|
||
191E C8 INY
|
||
191F A50F LDA VALUE+LO ; ALSO STORE LSB IN 2ND SLOT
|
||
1921 9147 STA (ENTRY),Y
|
||
|
||
1923 A544 LDA RESULT ; UPDATE THE
|
||
1925 18 CLC ; RESULT TABLE POINTER
|
||
1926 6904 ADC #4 ; SO IT POINTS TO THE
|
||
1928 8544 STA RESULT ; NEXT ENTRY
|
||
|
||
192A 4C8A18 JMP READL ; AND LOOP BACK
|
||
|
||
192D ; -----------------------------------
|
||
192D ; FIND BASE ADDR OF RESULT ENTRY SLOT
|
||
192D ; -----------------------------------
|
||
|
||
192D A507 EFIND: LDA ARG2+LO ; LSB OF RESULT TABLE BASE
|
||
192F 18 CLC
|
||
1930 6544 ADC RESULT ; AND CURRENT POINTER
|
||
1932 8547 STA ENTRY+LO ; SAVE IN [ENTRY]
|
||
1934 A508 LDA ARG2+HI ; ALSO ADD MSB
|
||
1936 6900 ADC #0
|
||
1938 8548 STA ENTRY+HI
|
||
193A 60 RTS
|
||
|
||
193B ; ----------
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 66
|
||
--- READ HANDLER ---
|
||
|
||
193B ; FLUSH WORD
|
||
193B ; ----------
|
||
|
||
193B A545 FLUSHW: LDA LINLEN ; ANY CHARS LEFT IN LINE?
|
||
193D F011 BEQ FLEX ; NO, SCRAM
|
||
|
||
193F A443 LDY SOURCE ; GET CURRENT CHAR POINTER
|
||
1941 B105 LDA (ARG1),Y ; AND GRAB A CHAR
|
||
1943 205119 JSR BREAK ; IS IT A BREAK?
|
||
1946 B008 BCS FLEX ; EXIT IF SO
|
||
1948 C645 DEC LINLEN ; ELSE UPDATE CHAR COUNT
|
||
194A E646 INC WRDLEN ; AND WORD-CHAR COUNT
|
||
194C E643 INC SOURCE ; AND CHAR POINTER
|
||
194E D0EB BNE FLUSHW ; AND LOOP BACK (ALWAYS)
|
||
|
||
1950 60 FLEX: RTS
|
||
|
||
1951 ; ---------------------------------
|
||
1951 ; IS CHAR IN [A] ANY TYPE OF BREAK?
|
||
1951 ; ---------------------------------
|
||
|
||
1951 206819 BREAK: JSR SIB ; CHECK FOR A SIB FIRST
|
||
1954 B022 BCS FBRK ; EXIT NOW IF MATCHED
|
||
|
||
1956 ; ELSE FALL THROUGH ...
|
||
|
||
1956 ; --------------------------------
|
||
1956 ; IS CHAR IN [A] A "NORMAL" BREAK?
|
||
1956 ; --------------------------------
|
||
|
||
1956 A205 NORM: LDX #NBRKS-1 ; NUMBER OF "NORMAL" BREAKS
|
||
1958 DD6219 NBL: CMP BRKTBL,X ; MATCHED?
|
||
195B F01B BEQ FBRK ; YES, EXIT
|
||
195D CA DEX
|
||
195E 10F8 BPL NBL ; NO, KEEP LOOKING
|
||
1960 18 CLC ; NO MATCH, CLEAR CARRY
|
||
1961 60 RTS ; AND RETURN
|
||
|
||
1962 ; ------------------
|
||
1962 ; NORMAL BREAK CHARS
|
||
1962 ; ------------------
|
||
|
||
1962 213F2C2E BRKTBL: DB "!?,." ; IN ORDER OF
|
||
1966 0D DB EOL ; ASCENDING FREQUENCY
|
||
1967 20 DB SPACE ; SPACE CHAR IS TESTED FIRST FOR SPEED
|
||
|
||
0006 NBRKS EQU $-BRKTBL ; # NORMAL BREAKS
|
||
|
||
1968 ; ---------------------
|
||
1968 ; IS CHAR IN [A] A SIB?
|
||
1968 ; ---------------------
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 67
|
||
--- READ HANDLER ---
|
||
|
||
|
||
1968 AA SIB: TAX ; SAVE TEST CHAR
|
||
1969 A000 LDY #0 ; 1ST BYTE IN VOCAB TABLE
|
||
196B B131 LDA (VOCAB),Y ; HAS # SIBS
|
||
196D A8 TAY ; USE AS AN INDEX
|
||
196E 8A TXA ; RESTORE TEST CHAR
|
||
196F D131 SBL: CMP (VOCAB),Y ; MATCHED?
|
||
1971 F005 BEQ FBRK ; YES, REPORT IT
|
||
1973 88 DEY
|
||
1974 D0F9 BNE SBL ; ELSE KEEP LOOPING
|
||
1976 18 CLC ; NO MATCH, SO
|
||
1977 60 RTS ; EXIT WITH CARRY CLEAR
|
||
|
||
1978 38 FBRK: SEC ; EXIT WITH CARRY SET
|
||
1979 60 RTS ; IF MATCHED WITH A BREAK CHAR
|
||
|
||
197A ; -----------------
|
||
197A ; VOCABULARY SEARCH
|
||
197A ; -----------------
|
||
|
||
197A ; ENTRY: 4-BYTE TARGET Z-WORD IN [OUT]
|
||
197A ; EXIT: ABS ENTRY ADDRESS IN [VALUE] IF FOUND;
|
||
197A ; OTHERWISE [VALUE] = 0
|
||
|
||
197A A000 FINDW: LDY #0 ; GET # SIBS
|
||
197C B131 LDA (VOCAB),Y ; IN VOCAB TABLE
|
||
197E 18 CLC ; INCREMENT IT
|
||
197F 6901 ADC #1 ; FOR PROPER ALIGNMENT
|
||
1981 6531 ADC VOCAB+LO ; NOW ADD THE BASE ADDR OF THE TABLE
|
||
1983 850F STA VALUE+LO ; TO GET THE ACTUAL BASE ADDR
|
||
1985 A532 LDA VOCAB+HI ; OF THE VOCAB ENTRIES
|
||
1987 6900 ADC #0 ; WHICH IS SAVED
|
||
1989 8510 STA VALUE+HI ; IN [VALUE]
|
||
|
||
198B B10F LDA (VALUE),Y ; GET # BYTES PER ENTRY ([Y] = 0)
|
||
198D 854B STA ESIZE ; SAVE IT HERE
|
||
|
||
198F 20B611 JSR INCVAL ; POINT TO NEXT BYTE
|
||
1992 B10F LDA (VALUE),Y ; GET # ENTRIES IN TABLE (MSB)
|
||
1994 854A STA NENTS+HI ; AND STUFF IT IN [NENTS]
|
||
|
||
1996 20B611 JSR INCVAL ; NEXT BYTE
|
||
1999 B10F LDA (VALUE),Y ; DON'T FORGET THE LSB!
|
||
199B 8549 STA NENTS+LO
|
||
|
||
199D 20B611 JSR INCVAL ; [VALUE] NOW POINTS TO 1ST ENTRY
|
||
|
||
19A0 ; BEGIN THE SEARCH!
|
||
|
||
19A0 A000 FWL1: LDY #0
|
||
19A2 B10F LDA (VALUE),Y ; GET 1ST BYTE OF ENTRY
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OPCODE EXECUTORS PAGE 68
|
||
--- READ HANDLER ---
|
||
|
||
19A4 C53D CMP OUT ; MATCHED 1ST BYTE OF TARGET?
|
||
19A6 D015 BNE WNEXT ; NO, SKIP TO NEXT WORD
|
||
|
||
19A8 C8 INY
|
||
19A9 B10F LDA (VALUE),Y
|
||
19AB C53E CMP OUT+1 ; 2ND BYTE MATCHED?
|
||
19AD D00E BNE WNEXT ; NOPE
|
||
|
||
19AF C8 INY
|
||
19B0 B10F LDA (VALUE),Y
|
||
19B2 C53F CMP OUT+2 ; 3RD BYTE?
|
||
19B4 D007 BNE WNEXT ; SORRY ...
|
||
|
||
19B6 C8 INY
|
||
19B7 B10F LDA (VALUE),Y
|
||
19B9 C540 CMP OUT+3 ; LAST BYTE
|
||
19BB F01F BEQ FWSUCC ; FOUND IT!
|
||
|
||
19BD A54B WNEXT: LDA ESIZE ; GET ENTRY SIZE
|
||
19BF 18 CLC ; AND ADD IT TO ENTRY ADDRESS
|
||
19C0 650F ADC VALUE+LO ; TO MAKE [VALUE]
|
||
19C2 850F STA VALUE+LO ; POINT TO THE NEXT ENTRY
|
||
19C4 9002 BCC WNX
|
||
19C6 E610 INC VALUE+HI
|
||
|
||
19C8 A549 WNX: LDA NENTS+LO ; DECREMENT THE
|
||
19CA 38 SEC ; ENTRY COUNTER
|
||
19CB E901 SBC #1
|
||
19CD 8549 STA NENTS+LO
|
||
19CF B002 BCS WNX1
|
||
19D1 C64A DEC NENTS+HI
|
||
|
||
19D3 054A WNX1: ORA NENTS+HI ; KEEP SEARCHING
|
||
19D5 D0C9 BNE FWL1 ; UNTIL COUNT IS ZERO
|
||
|
||
19D7 850F STA VALUE+LO
|
||
19D9 8510 STA VALUE+HI
|
||
19DB 60 RTS ; THEN RETURN WITH [VALUE] = 0
|
||
|
||
19DC ; ENTRY MATCHED!
|
||
|
||
19DC A510 FWSUCC: LDA VALUE+HI ; CONVERT ABSOLUTE ENTRY ADDRESS
|
||
19DE 38 SEC ; IN [VALUE]
|
||
19DF E526 SBC ZCODE ; TO RELATIVE Z-ADDRESS
|
||
19E1 8510 STA VALUE+HI ; LSB NEEDN'T CHANGE
|
||
19E3 60 RTS
|
||
|
||
END
|
||
|
||
INCLUD PAGING.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 69
|
||
--- TIME-STAMP PAGING ROUTINE (BM 11/24/84) ---
|
||
|
||
|
||
19E4 ; -------------------------
|
||
19E4 ; FETCH NEXT BYTE OF Z-CODE
|
||
19E4 ; -------------------------
|
||
|
||
19E4 ; EXIT: BYTE AT [ZPC] IN [A] & [Y]; FLAGS SET
|
||
|
||
19E4 A51C NEXTPC: LDA ZPCFLG ; IS [ZPCPNT] VALID?
|
||
19E6 D01E BNE NPC2 ; YES, GET THE BYTE
|
||
|
||
19E8 ; Z-PAGE HAS CHANGED!
|
||
|
||
19E8 A51A LDA ZPCM ; GET TOP
|
||
19EA A41B LDY ZPCH ; 9 BITS OF [ZPC]
|
||
19EC D008 BNE NPC0 ; SWAP PAGE IF TOP BIT IS SET
|
||
|
||
19EE C527 CMP ZPURE ; IS THIS PAGE PRELOADED?
|
||
19F0 B004 BCS NPC0 ; NO, SWAP IT IN
|
||
|
||
19F2 6526 ADC ZCODE ; ELSE MAKE IT ABSOLUTE
|
||
19F4 D007 BNE NPC1 ; AND GIVE IT TO [ZPCPNT]
|
||
|
||
19F6 A200 NPC0: LDX #0
|
||
19F8 8622 STX MPCFLG ; INVALIDATE [MPC]
|
||
19FA 20501A JSR PAGE ; AND GET ABS PAGE ADDR INTO [A]
|
||
|
||
19FD 851E NPC1: STA ZPCPNT+HI ; SET ABS PAGE ADDRESS
|
||
19FF A2FF LDX #$FF
|
||
1A01 861C STX ZPCFLG ; VALIDATE [ZPCPNT]
|
||
1A03 E8 INX ; = 0
|
||
1A04 861D STX ZPCPNT+LO ; CLEAR LSB OF POINTER
|
||
|
||
1A06 A419 NPC2: LDY ZPCL ; FETCH PAGE INDEX
|
||
1A08 B11D LDA (ZPCPNT),Y ; GET Z-BYTE
|
||
|
||
1A0A E619 INC ZPCL ; END OF PAGE YET?
|
||
1A0C D00A BNE NPC3 ; NO, EXIT
|
||
|
||
1A0E A000 LDY #0
|
||
1A10 841C STY ZPCFLG ; ELSE INVALIDATE [ZPCPNT]
|
||
|
||
1A12 E61A INC ZPCM ; POINT [ZPC] TO
|
||
1A14 D002 BNE NPC3 ; THE NEXT
|
||
1A16 E61B INC ZPCH ; Z-PAGE
|
||
|
||
1A18 A8 NPC3: TAY ; SET FLAGS
|
||
1A19 60 RTS ; AND RETURN
|
||
|
||
1A1A ; -------------------------------
|
||
1A1A ; GET NEXT BYTE OF VIRTUAL MEMORY
|
||
1A1A ; -------------------------------
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 70
|
||
--- TIME-STAMP PAGING ROUTINE (BM 11/24/84) ---
|
||
|
||
|
||
1A1A ; EXIT: BYTE AT [MPC] IN [A] & [Y]; FLAGS SET
|
||
|
||
1A1A A522 GETBYT: LDA MPCFLG ; IS [MPCPNT] VALID?
|
||
1A1C D01E BNE GTBT2 ; YES, GET THE BYTE
|
||
|
||
1A1E ; Z-PAGE HAS CHANGED!
|
||
|
||
1A1E A520 LDA MPCM ; GET TOP
|
||
1A20 A421 LDY MPCH ; 9 BITS OF [MPC]
|
||
1A22 D008 BNE GTBT0 ; SWAP PAGE IF TOP BIT IS SET
|
||
|
||
1A25 PATCH EQU $+1 ; PATCH POINT FOR "VERIFY"
|
||
|
||
1A24 C527 CMP ZPURE ; IS THIS PAGE PRELOADED?
|
||
1A26 B004 BCS GTBT0 ; NO, SWAP IT IN
|
||
|
||
1A28 6526 ADC ZCODE ; ELSE MAKE IT ABSOLUTE
|
||
1A2A D007 BNE GTBT1 ; AND GIVE IT TO [MPCPNT]
|
||
|
||
1A2C A200 GTBT0: LDX #0
|
||
1A2E 861C STX ZPCFLG ; INVALIDATE [ZPC]
|
||
1A30 20501A JSR PAGE ; AND GET ABS PAGE ADDR INTO [A]
|
||
|
||
1A33 8524 GTBT1: STA MPCPNT+HI ; SET ABS PAGE ADDRESS
|
||
1A35 A2FF LDX #$FF
|
||
1A37 8622 STX MPCFLG ; VALIDATE [MPCPNT]
|
||
1A39 E8 INX ; = 0
|
||
1A3A 8623 STX MPCPNT+LO ; CLEAR LSB OF POINTER
|
||
|
||
1A3C A41F GTBT2: LDY MPCL ; FETCH PAGE INDEX
|
||
1A3E B123 LDA (MPCPNT),Y ; GET Z-BYTE
|
||
|
||
1A40 E61F INC MPCL ; END OF PAGE YET?
|
||
1A42 D00A BNE GTBT3 ; NO, EXIT
|
||
|
||
1A44 A000 LDY #0
|
||
1A46 8422 STY MPCFLG ; ELSE INVALIDATE [MPCPNT]
|
||
|
||
1A48 E620 INC MPCM ; POINT [MPC] TO
|
||
1A4A D002 BNE GTBT3 ; THE NEXT
|
||
1A4C E621 INC MPCH ; Z-PAGE
|
||
|
||
1A4E A8 GTBT3: TAY ; SET FLAGS
|
||
1A4F 60 RTS ; AND RETURN
|
||
|
||
1A50 ; ------------------------
|
||
1A50 ; LOCATE A SWAPABLE Z-PAGE
|
||
1A50 ; ------------------------
|
||
|
||
1A50 ; ENTRY: TARGET Z-PAGE IN [A/Y] (9 BITS)
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 71
|
||
--- TIME-STAMP PAGING ROUTINE (BM 11/24/84) ---
|
||
|
||
1A50 ; EXIT: ABSOLUTE PAGE IN [A]
|
||
|
||
1A50 852B PAGE: STA TARGET+LO ; SAVE THE
|
||
1A52 842C STY TARGET+HI ; TARGET Z-PAGE HERE
|
||
|
||
1A54 ; IS THIS Z-PAGE ALREADY PAGED IN?
|
||
|
||
1A54 A200 LDX #0
|
||
1A56 862A STX ZPAGE ; START AT BUFFER #0
|
||
|
||
1A58 DD000B PG1: CMP PTABL,X ; LSB MATCHED?
|
||
1A5B D008 BNE PG2 ; NO, TRY NEXT BUFFER
|
||
1A5D 98 TYA ; ELSE CHECK
|
||
1A5E DDA00B CMP PTABH,X ; TOP BIT
|
||
1A61 F02B BEQ PG4 ; MATCHED! BUFFER IN [ZPAGE]
|
||
1A63 A52B LDA TARGET+LO ; ELSE RESTORE LSB
|
||
1A65 E62A PG2: INC ZPAGE ; UPDATE TALLY
|
||
1A67 E8 INX
|
||
1A68 E429 CPX PMAX ; OUT OF BUFFERS YET?
|
||
1A6A 90EC BCC PG1 ; NO, KEEP SEARCHING
|
||
|
||
1A6C ; SWAP IN THE TARGET PAGE
|
||
|
||
1A6C 20C71A PG3: JSR EARLY ; GET EARLIEST PAGE
|
||
1A6F A62E LDX SWAP ; INTO [SWAP] & [X]
|
||
1A71 862A STX ZPAGE ; SAVE FOR LATER
|
||
|
||
1A73 A52B LDA TARGET+LO ; ASSIGN THE TARGET PAGE
|
||
1A75 9D000B STA PTABL,X ; TO THE EARLIEST BUFFER
|
||
1A78 8570 STA DBLOCK+LO ; ALSO GIVE IT TO ZDOS
|
||
|
||
1A7A A52C LDA TARGET+HI ; SAME FOR TOP BIT
|
||
1A7C 2901 AND #%00000001 ; USE ONLY BIT 0
|
||
1A7E 9DA00B STA PTABH,X
|
||
1A81 8571 STA DBLOCK+HI
|
||
|
||
1A83 8A TXA
|
||
1A84 18 CLC
|
||
1A85 6528 ADC PAGE0 ; CALC ABS ADDR OF BUFFER
|
||
1A87 8573 STA DBUFF+HI ; GIVE IT TO ZDOS
|
||
|
||
1A89 208A23 JSR GETDSK ; SWAP IN THE NEW PAGE
|
||
1A8C B034 BCS DISKE ; ERROR IF CARRY SET
|
||
|
||
1A8E ; UPDATE THE TIMESTAMP
|
||
|
||
1A8E A42A PG4: LDY ZPAGE ; GET THE BUFFER INDEX
|
||
1A90 B9500C LDA LRUMAP,Y ; GET THIS BUFFER'S STAMP
|
||
1A93 C52D CMP STAMP ; SAME AS CURRENT STAMP?
|
||
1A95 F025 BEQ PG8 ; YES, EXIT
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 72
|
||
--- TIME-STAMP PAGING ROUTINE (BM 11/24/84) ---
|
||
|
||
1A97 E62D INC STAMP ; UPDATE STAMP
|
||
1A99 D01C BNE PG7 ; CONTINUE IF NO OVERFLOW
|
||
|
||
1A9B ; HANDLE STAMP OVERFLOW
|
||
|
||
1A9B 20C71A JSR EARLY ; GET EARLIEST STAMP INTO [LRU]
|
||
|
||
1A9E A200 LDX #0 ; INIT INDEX
|
||
1AA0 BD500C PG5: LDA LRUMAP,X ; GET A STAMP READING
|
||
1AA3 F006 BEQ PG6 ; EXIT IF ALREADY ZERO
|
||
1AA5 38 SEC ; ELSE SUBTRACT OFF
|
||
1AA6 E525 SBC LRU ; THE EARLIEST TIMESTAMP
|
||
1AA8 9D500C STA LRUMAP,X ; AND REPLACE THE STAMP
|
||
1AAB E8 PG6: INX
|
||
1AAC E429 CPX PMAX ; END OF SWAPPING SPACE?
|
||
1AAE 90F0 BCC PG5 ; LOOP TILL ALL STAMPS FIXED
|
||
|
||
1AB0 A900 LDA #0 ; TURN BACK THE CLOCK
|
||
1AB2 38 SEC ; TO REFLECT NEW
|
||
1AB3 E525 SBC LRU ; STAMP READING
|
||
1AB5 852D STA STAMP
|
||
|
||
1AB7 A52D PG7: LDA STAMP ; FETCH STAMP
|
||
1AB9 99500C STA LRUMAP,Y ; STAMP TARGET PAGE WITH IT
|
||
|
||
1ABC A52A PG8: LDA ZPAGE ; GET BUFFER INDEX
|
||
1ABE 18 CLC ; MAKE IT
|
||
1ABF 6528 ADC PAGE0 ; ABSOLUTE
|
||
1AC1 60 RTS ; AND RETURN IT IN [A]
|
||
|
||
1AC2 ; *** ERROR #14: DRIVE ACCESS ***
|
||
|
||
1AC2 A90E DISKE: LDA #14
|
||
1AC4 4CC41D JMP ZERROR
|
||
|
||
1AC7 ; -------------------------
|
||
1AC7 ; LOCATE EARLIEST TIMESTAMP
|
||
1AC7 ; -------------------------
|
||
|
||
1AC7 ; EXIT: [LRU] - EARLIEST TIMESTAMP
|
||
1AC7 ; [SWAP] = INDEX TO EARLIEST BUFFER
|
||
|
||
1AC7 A200 EARLY: LDX #0 ; INIT INDEX
|
||
1AC9 862E STX SWAP ; AND [SWAP]
|
||
1ACB AD500C LDA LRUMAP ; GET STAMP OF BUFFER #0
|
||
1ACE E8 INX ; START COMPARE WITH BUFFER #1
|
||
1ACF DD500C EAR0: CMP LRUMAP,X ; IS THIS STAMP EARLIER THAN [A]?
|
||
1AD2 9005 BCC EAR1 ; NO, TRY NEXT STAMP
|
||
1AD4 BD500C LDA LRUMAP,X ; ELSE FETCH EARLIER ENTRY
|
||
1AD7 862E STX SWAP ; AND REMEMBER WHERE WE FOUND IT
|
||
1AD9 E8 EAR1: INX ; POINT TO NEXT STAMP
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 73
|
||
--- TIME-STAMP PAGING ROUTINE (BM 11/24/84) ---
|
||
|
||
1ADA E429 CPX PMAX ; OUT OF STAMPS YET?
|
||
1ADC 90F1 BCC EAR0 ; LOOP TILL EMPTY
|
||
|
||
1ADE 8525 STA LRU ; SAVE EARLIEST STAMP HERE
|
||
1AE0 60 RTS
|
||
|
||
1AE1 ; -------------------------
|
||
1AE1 ; POINT [MPC] TO V-ADDR [I]
|
||
1AE1 ; -------------------------
|
||
|
||
1AE1 A511 SETWRD: LDA I+LO
|
||
1AE3 851F STA MPCL
|
||
1AE5 A512 LDA I+HI
|
||
1AE7 8520 STA MPCM
|
||
|
||
1AE9 A900 LDA #0
|
||
1AEB 8521 STA MPCH ; ZERO TOP BIT
|
||
1AED 8522 STA MPCFLG ; INVALIDATE [MPC]
|
||
1AEF 60 RTS
|
||
|
||
1AF0 ; ----------------------------
|
||
1AF0 ; GET Z-WORD AT [MPC] INTO [I]
|
||
1AF0 ; ----------------------------
|
||
|
||
1AF0 201A1A GETWRD: JSR GETBYT
|
||
1AF3 8512 STA I+HI
|
||
1AF5 201A1A JSR GETBYT
|
||
1AF8 8511 STA I+LO
|
||
1AFA 60 RTS
|
||
|
||
END
|
||
INCLUD ZSTRING.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 74
|
||
--- Z-STRING HANDLERS ---
|
||
|
||
|
||
1AFB ; -----------------------
|
||
1AFB ; POINT TO ZSTRING IN [I]
|
||
1AFB ; -----------------------
|
||
|
||
1AFB A511 SETSTR: LDA I+LO ; WORD-ALIGN THE ADDRESS
|
||
1AFD 0A ASL A
|
||
1AFE 851F STA MPCL
|
||
1B00 A512 LDA I+HI
|
||
1B02 2A ROL A
|
||
1B03 8520 STA MPCM
|
||
1B05 A900 LDA #0
|
||
1B07 8522 STA MPCFLG ; [MPC] IS CHANGING!
|
||
1B09 2A ROL A
|
||
1B0A 8521 STA MPCH
|
||
|
||
1B0C 60 ZSTEX: RTS
|
||
|
||
1B0D ; -----------------------
|
||
1B0D ; PRINT Z-STRING AT [MPC]
|
||
1B0D ; -----------------------
|
||
|
||
1B0D A200 PZSTR: LDX #0
|
||
1B0F 864C STX PSET ; ASSUME PERMANENT CHARSET
|
||
1B11 8650 STX ZFLAG ; CLEAR BYTE FLAG
|
||
1B13 CA DEX ; = $FF
|
||
1B14 864D STX TSET ; NO TEMPSET ACTIVE
|
||
|
||
1B16 20E11B PZTOP: JSR GETZCH ; GET A Z-CHAR
|
||
1B19 B0F1 BCS ZSTEX ; END OF STRING IF CARRY IS SET
|
||
|
||
1B1B 854E STA ZCHAR ; ELSE SAVE CHAR HERE
|
||
1B1D AA TAX ; SET FLAGS
|
||
1B1E F041 BEQ BLANK ; PRINT SPACE IF CHAR = 0
|
||
|
||
1B20 C904 CMP #4 ; IS THIS AN F-WORD?
|
||
1B22 905B BCC DOFREQ ; APPARENTLY SO
|
||
|
||
1B24 C906 CMP #6 ; PERHAPS A SHIFT CODE?
|
||
1B26 903D BCC NEWSET ; YES, CHANGE CHARSETS
|
||
|
||
1B28 20D51B JSR GETSET ; ELSE GET CHARSET
|
||
1B2B AA TAX ; SET FLAGS
|
||
1B2C D00B BNE SET1 ; SKIP IF NOT CHARSET #0
|
||
|
||
1B2E ; PRINT A LOWER-CASE CHAR (CHARSET #0)
|
||
|
||
1B2E A95B LDA #$61-6 ; ASCII "a" MINUS Z-OFFSET
|
||
|
||
1B30 18 TOASC: CLC
|
||
1B31 654E ADC ZCHAR ; ADD Z-CHAR INDEX
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 75
|
||
--- Z-STRING HANDLERS ---
|
||
|
||
|
||
1B33 20451E SHOVE: JSR COUT ; SHOW THE CHAR
|
||
1B36 4C161B JMP PZTOP ; AND GRAB NEXT CHAR
|
||
|
||
1B39 ; PRINT AN UPPER-CASE CHAR (CHARSET #1)
|
||
|
||
1B39 C901 SET1: CMP #1 ; MAKE SURE IT'S SET #1
|
||
1B3B D004 BNE SET2 ; ELSE MUST BE SET #2
|
||
|
||
1B3D A93B LDA #$41-6 ; ASCII "A" MINUS Z-OFFSET
|
||
1B3F D0EF BNE TOASC ; SAME AS SET #0
|
||
|
||
1B41 ; PRINT FROM CHARSET #2
|
||
|
||
1B41 A54E SET2: LDA ZCHAR ; RETRIEVE THE Z-CHAR
|
||
1B43 38 SEC
|
||
1B44 E906 SBC #6 ; ZERO-ALIGN IT
|
||
1B46 F007 BEQ DIRECT ; IF ZERO, IT'S A "DIRECT" ASCII
|
||
|
||
1B48 AA TAX ; OTHERWISE USE CODE AS AN INDEX
|
||
1B49 BDFE1C LDA CHRTBL,X ; INTO THE CHARSET TABLE
|
||
1B4C 4C331B JMP SHOVE ; AND PRINT THE CHAR
|
||
|
||
1B4F ; DECODE A "DIRECT" ASCII CHAR
|
||
|
||
1B4F 20E11B DIRECT: JSR GETZCH ; FETCH NEXT Z-CHAR
|
||
1B52 0A ASL A
|
||
1B53 0A ASL A
|
||
1B54 0A ASL A
|
||
1B55 0A ASL A
|
||
1B56 0A ASL A ; SHIFT INTO POSITION
|
||
1B57 854E STA ZCHAR ; AND SAVE HERE
|
||
1B59 20E11B JSR GETZCH ; GRAB YET ANOTHER Z-CHAR
|
||
1B5C 054E ORA ZCHAR ; SUPERIMPOSE THE 2ND BYTE
|
||
1B5E 4C331B JMP SHOVE ; AND PRINT THE RESULT
|
||
|
||
1B61 ; PRINT A SPACE
|
||
|
||
1B61 A920 BLANK: LDA #SPACE ; ASCII SPACE CHAR
|
||
1B63 D0CE BNE SHOVE
|
||
|
||
1B65 ; CHANGE CHARSET
|
||
|
||
1B65 38 NEWSET: SEC ; CONVERT THE SHIFT CODE
|
||
1B66 E903 SBC #3 ; TO 1 OR 2
|
||
1B68 A8 TAY
|
||
1B69 20D51B JSR GETSET ; IS MODE TEMPORARY?
|
||
1B6C D005 BNE TOPERM ; YES, DO A PERMSHIFT
|
||
1B6E 844D STY TSET ; ELSE JUST A TEMPSHIFT
|
||
1B70 4C161B JMP PZTOP ; AND CONTINUE
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 76
|
||
--- Z-STRING HANDLERS ---
|
||
|
||
1B73 844C TOPERM: STY PSET ; SET PERM CHARSET
|
||
1B75 C54C CMP PSET ; SAME AS BEFORE?
|
||
1B77 F09D BEQ PZTOP ; YES, CONTINUE
|
||
1B79 A900 LDA #0
|
||
1B7B 854C STA PSET ; ELSE RESET CHARSET
|
||
1B7D F097 BEQ PZTOP ; BEFORE LOOPING BACK
|
||
|
||
1B7F ; PRINT AN F-WORD
|
||
|
||
1B7F 38 DOFREQ: SEC
|
||
1B80 E901 SBC #1 ; ZERO-ALIGN THE CODE
|
||
1B82 0A ASL A ; AND MULTIPLY TIMES 64
|
||
1B83 0A ASL A ; TO OBTAIN THE SEGMENT OFFSET
|
||
1B84 0A ASL A ; INTO THE F-WORDS TABLE
|
||
1B85 0A ASL A
|
||
1B86 0A ASL A
|
||
1B87 0A ASL A
|
||
1B88 854F STA OFFSET ; SAVE OFFSET FOR LATER
|
||
|
||
1B8A 20E11B JSR GETZCH ; NOW GET THE F-WORD POINTER
|
||
1B8D 0A ASL A ; WORD-ALIGN IT
|
||
1B8E 18 CLC ; AND
|
||
1B8F 654F ADC OFFSET ; ADD THE SEGMENT OFFSET
|
||
1B91 A8 TAY ; TO GET THE OFFSET OF THE F-WORD
|
||
1B92 B133 LDA (FWORDS),Y ; FROM THE START OF THE F-WORDS TABLE
|
||
1B94 8512 STA I+HI ; SAVE MSB OF F-WORD ADDRESS
|
||
1B96 C8 INY
|
||
1B97 B133 LDA (FWORDS),Y ; ALSO SAVE LSB
|
||
1B99 8511 STA I+LO ; Z-ADDRESS OF F-WORD IS IN [I]
|
||
|
||
1B9B ; SAVE THE STATE OF CURRENT Z-STRING
|
||
|
||
1B9B A521 LDA MPCH
|
||
1B9D 48 PHA
|
||
1B9E A520 LDA MPCM
|
||
1BA0 48 PHA
|
||
1BA1 A51F LDA MPCL
|
||
1BA3 48 PHA
|
||
1BA4 A54C LDA PSET
|
||
1BA6 48 PHA
|
||
1BA7 A550 LDA ZFLAG
|
||
1BA9 48 PHA
|
||
1BAA A552 LDA ZWORD+HI
|
||
1BAC 48 PHA
|
||
1BAD A551 LDA ZWORD+LO
|
||
1BAF 48 PHA
|
||
|
||
1BB0 20FB1A JSR SETSTR ; PRINT THE Z-STRING
|
||
1BB3 200D1B JSR PZSTR ; IN [I]
|
||
|
||
1BB6 ; RESTORE OLD Z-STRING
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 77
|
||
--- Z-STRING HANDLERS ---
|
||
|
||
|
||
1BB6 68 PLA
|
||
1BB7 8551 STA ZWORD+LO
|
||
1BB9 68 PLA
|
||
1BBA 8552 STA ZWORD+HI
|
||
1BBC 68 PLA
|
||
1BBD 8550 STA ZFLAG
|
||
1BBF 68 PLA
|
||
1BC0 854C STA PSET
|
||
1BC2 68 PLA
|
||
1BC3 851F STA MPCL
|
||
1BC5 68 PLA
|
||
1BC6 8520 STA MPCM
|
||
1BC8 68 PLA
|
||
1BC9 8521 STA MPCH
|
||
|
||
1BCB A2FF LDX #$FF
|
||
1BCD 864D STX TSET ; DISABLE TEMP CHARSET
|
||
1BCF E8 INX ; = 0
|
||
1BD0 8622 STX MPCFLG ; [MPC] HAS CHANGED
|
||
1BD2 4C161B JMP PZTOP ; CONTINUE INNOCENTLY
|
||
|
||
1BD5 ; ----------------------
|
||
1BD5 ; RETURN CURRENT CHARSET
|
||
1BD5 ; ----------------------
|
||
|
||
1BD5 A54D GETSET: LDA TSET
|
||
1BD7 1003 BPL GS
|
||
1BD9 A54C LDA PSET
|
||
1BDB 60 RTS
|
||
|
||
1BDC A0FF GS: LDY #$FF
|
||
1BDE 844D STY TSET
|
||
1BE0 60 RTS
|
||
|
||
1BE1 ; -----------------
|
||
1BE1 ; FETCH NEXT Z-CHAR
|
||
1BE1 ; -----------------
|
||
|
||
1BE1 A550 GETZCH: LDA ZFLAG ; WHICH BYTE IS THIS?
|
||
1BE3 1002 BPL GTZ0 ; $FF = LAST
|
||
1BE5 38 SEC ; SET CARRY TO INDICATE
|
||
1BE6 60 RTS ; NO MORE CHARS
|
||
|
||
1BE7 D013 GTZ0: BNE GETZ1 ; NOT FIRST CHAR, EITHER
|
||
|
||
1BE9 ; GET A Z-WORD INTO [ZWORD], RETURN 1ST CHAR IN TRIPLET
|
||
|
||
1BE9 E650 INC ZFLAG ; UPDATE CHAR COUNT
|
||
|
||
1BEB 201A1A JSR GETBYT ; GET TRIPLET AT [MPC]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 78
|
||
--- Z-STRING HANDLERS ---
|
||
|
||
1BEE 8552 STA ZWORD+HI ; INTO [ZWORD]
|
||
1BF0 201A1A JSR GETBYT
|
||
1BF3 8551 STA ZWORD+LO
|
||
|
||
1BF5 A552 LDA ZWORD+HI
|
||
1BF7 4A LSR A
|
||
1BF8 4A LSR A ; SHIFT 1ST CHAR INTO PLACE
|
||
1BF9 4C251C JMP GTEXIT ; AND RETURN IT
|
||
|
||
1BFC 38 GETZ1: SEC
|
||
1BFD E901 SBC #1
|
||
1BFF D016 BNE GETZ2 ; LAST CHAR IN TRIPLET IF ZERO
|
||
1C01 A902 LDA #2 ; ELSE
|
||
1C03 8550 STA ZFLAG ; RESET CHAR INDEX
|
||
|
||
1C05 A551 LDA ZWORD+LO ; GET BOTTOM HALF OF TRIPLET
|
||
1C07 8511 STA I+LO ; MOVE HERE FOR SHIFTING
|
||
1C09 A552 LDA ZWORD+HI ; GET TOP HALF
|
||
|
||
1C0B 0611 ASL I+LO ; SHIFT THE TOP 3 BITS OF LOWER HALF
|
||
1C0D 2A ROL A ; INTO THE BOTTOM OF THE TOP HALF
|
||
1C0E 0611 ASL I+LO
|
||
1C10 2A ROL A
|
||
1C11 0611 ASL I+LO
|
||
1C13 2A ROL A
|
||
1C14 4C251C JMP GTEXIT
|
||
|
||
1C17 A900 GETZ2: LDA #0 ; SET FLAG TO INDICATE
|
||
1C19 8550 STA ZFLAG ; END OF TRIPLET
|
||
|
||
1C1B A552 LDA ZWORD+HI ; TEST TOP HALF OF TRIPLET
|
||
1C1D 1004 BPL GETZ3 ; CONTINUE IF NOT END OF STRING
|
||
1C1F A9FF LDA #$FF ; ELSE
|
||
1C21 8550 STA ZFLAG ; INDICATE LAST TRIPLET IN STRING
|
||
|
||
1C23 A551 GETZ3: LDA ZWORD+LO ; GET BOTTOM HALF OF TRIPLET
|
||
|
||
1C25 291F GTEXIT: AND #%00011111 ; MASK OUT GARBAGE BITS
|
||
1C27 18 CLC
|
||
1C28 60 RTS
|
||
|
||
1C29 ; ---------------------------------
|
||
1C29 ; CONVERT [IN] TO Z-STRING IN [OUT]
|
||
1C29 ; ---------------------------------
|
||
|
||
1C29 A905 CONZST: LDA #$05 ; FILL OUTPUT BUFFER
|
||
1C2B AA TAX ; WITH PAD CHARS ($05)
|
||
1C2C 953D CZSL: STA OUT,X
|
||
1C2E CA DEX
|
||
1C2F 10FB BPL CZSL
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 79
|
||
--- Z-STRING HANDLERS ---
|
||
|
||
1C31 A906 LDA #6 ; INIT
|
||
1C33 8553 STA CONCNT ; CHAR COUNT
|
||
|
||
1C35 A900 LDA #0 ; CLEAR
|
||
1C37 8554 STA CONIN ; SOURCE AND
|
||
1C39 8555 STA CONOUT ; OUTPUT INDEXES
|
||
|
||
1C3B A654 CONTOP: LDX CONIN ; FETCH SOURCE INDEX
|
||
1C3D E654 INC CONIN ; AND UPDATE
|
||
1C3F B537 LDA IN,X ; GRAB AN ASCII CHAR
|
||
1C41 854E STA ZCHAR ; SAVE IT HERE
|
||
1C43 D004 BNE NEXTZ ; CONTINUE IF CHAR WAS NZ
|
||
|
||
1C45 A905 LDA #5 ; ELSE SHIP OUT
|
||
1C47 D02C BNE CSHIP ; A PAD CHAR
|
||
|
||
1C49 A54E NEXTZ: LDA ZCHAR
|
||
1C4B 20BF1C JSR SAYSET ; WHICH CHARSET TO USE?
|
||
1C4E F020 BEQ CSET0 ; LOWER-CASE IF ZERO
|
||
|
||
1C50 18 CLC ; ELSE DO A TEMP-SHIFT
|
||
1C51 6903 ADC #3 ; 4 = CHARSET 1, 5 = CHARSET 2
|
||
1C53 A655 LDX CONOUT ; FETCH OUTPUT INDEX
|
||
1C55 953D STA OUT,X ; SEND THE SHIFT CHAR
|
||
|
||
1C57 E655 INC CONOUT ; UPDATE INDEX
|
||
1C59 C653 DEC CONCNT ; AND CHAR COUNT
|
||
1C5B D003 BNE CTEST ; IF OUT OF CHARS
|
||
1C5D 4CD81C JMP ZCRUSH ; CRUSH 'EM!
|
||
|
||
1C60 A54E CTEST: LDA ZCHAR ; TEST CHAR AGAIN
|
||
1C62 20BF1C JSR SAYSET
|
||
1C65 C902 CMP #2
|
||
1C67 F019 BEQ CSET2 ; CHARSET #2
|
||
|
||
1C69 ; HANDLE CHARSET #1 (UPPER CASE ALPHA)
|
||
|
||
1C69 A54E LDA ZCHAR
|
||
1C6B 38 SEC
|
||
1C6C E93B SBC #$41-6 ; CONVERT TO Z-CHAR
|
||
1C6E 1005 BPL CSHIP ; AND SEND TO OUTPUT
|
||
|
||
1C70 ; HANDLE CHARSET #0 (LOWER CASE ALPHA)
|
||
|
||
1C70 A54E CSET0: LDA ZCHAR
|
||
1C72 38 SEC
|
||
1C73 E95B SBC #$61-6 ; CONVERT TO Z-CHAR
|
||
|
||
1C75 ; SHIP Z-CHAR TO OUTPUT BUFFER
|
||
|
||
1C75 A655 CSHIP: LDX CONOUT ; FETCH OUTPUT INDEX
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 80
|
||
--- Z-STRING HANDLERS ---
|
||
|
||
1C77 953D STA OUT,X
|
||
|
||
1C79 E655 INC CONOUT ; UPDATE INDEX
|
||
1C7B C653 DEC CONCNT ; DONE 6 CHARS YET?
|
||
1C7D D0BC BNE CONTOP ; NO, LOOP BACK
|
||
1C7F 4CD81C JMP ZCRUSH ; ELSE CRUSH
|
||
|
||
1C82 ; HANDLE CHARSET #2 (MISCELLANEOUS)
|
||
|
||
1C82 A54E CSET2: LDA ZCHAR ; GRAB CHAR
|
||
1C84 20AF1C JSR CTABLE ; IS IT IN CHARSET #3 TABLE?
|
||
1C87 D0EC BNE CSHIP ; YES, SEND IT TO OUTPUT
|
||
|
||
1C89 ; SEND A "DIRECT" ASCII CHAR
|
||
|
||
1C89 A906 LDA #6 ; ASCII ALERT!
|
||
1C8B A655 LDX CONOUT
|
||
1C8D 953D STA OUT,X
|
||
|
||
1C8F E655 INC CONOUT ; UPDATE INDEX
|
||
1C91 C653 DEC CONCNT ; AND CHAR COUNT
|
||
1C93 F043 BEQ ZCRUSH ; BUFFER FULL!
|
||
|
||
1C95 ; SEND 1ST HALF OF "DIRECT"
|
||
|
||
1C95 A54E LDA ZCHAR
|
||
1C97 4A LSR A
|
||
1C98 4A LSR A
|
||
1C99 4A LSR A
|
||
1C9A 4A LSR A
|
||
1C9B 4A LSR A
|
||
1C9C 2903 AND #%00000011 ; MASK GARBAGE
|
||
1C9E A655 LDX CONOUT
|
||
1CA0 953D STA OUT,X
|
||
|
||
1CA2 E655 INC CONOUT
|
||
1CA4 C653 DEC CONCNT
|
||
1CA6 F030 BEQ ZCRUSH ; BUFFER FULL!
|
||
|
||
1CA8 ; SEND 2ND HALF OF "DIRECT"
|
||
|
||
1CA8 A54E LDA ZCHAR ; GET CHAR YET AGAIN
|
||
1CAA 291F AND #%00011111 ; MASK JUNK
|
||
1CAC 4C751C JMP CSHIP ; AND SHIP IT OUT
|
||
|
||
1CAF ; ---------------------
|
||
1CAF ; IS [A] IN CHARSET #3?
|
||
1CAF ; ---------------------
|
||
|
||
1CAF ; EXIT: [A] = CHAR CODE IF FOUND, Z-FLAG CLEARED
|
||
1CAF ; Z-FLAG SET IF NOT FOUND
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 81
|
||
--- Z-STRING HANDLERS ---
|
||
|
||
|
||
1CAF A219 CTABLE: LDX #25
|
||
1CB1 DDFE1C CNL: CMP CHRTBL,X
|
||
1CB4 F004 BEQ CNOK
|
||
1CB6 CA DEX
|
||
1CB7 D0F8 BNE CNL
|
||
1CB9 60 RTS ; Z-FLAG SET IF NO MATCH
|
||
|
||
1CBA 8A CNOK: TXA ; CHAR CODE IS INDEX
|
||
1CBB 18 CLC
|
||
1CBC 6906 ADC #6 ; PLUS 6
|
||
1CBE 60 RTS
|
||
|
||
1CBF ; -----------------------------
|
||
1CBF ; RETURN CHARSET OF CHAR IN [A]
|
||
1CBF ; -----------------------------
|
||
|
||
1CBF C961 SAYSET: CMP #'a'
|
||
1CC1 9007 BCC SAY1
|
||
1CC3 C97B CMP #'z'+1
|
||
1CC5 B003 BCS SAY1
|
||
1CC7 A900 LDA #0 ; IT'S CHARSET #0
|
||
1CC9 60 RTS
|
||
|
||
1CCA C941 SAY1: CMP #'A'
|
||
1CCC 9007 BCC SAY2
|
||
1CCE C95B CMP #'Z'+1
|
||
1CD0 B003 BCS SAY2
|
||
1CD2 A901 LDA #1 ; IT'S CHARSET #1
|
||
1CD4 60 RTS
|
||
|
||
1CD5 A902 SAY2: LDA #2 ; IT'S CHARSET #2
|
||
1CD7 60 RTS
|
||
|
||
1CD8 ; ----------------------
|
||
1CD8 ; CRUSH Z-CHARS IN [OUT]
|
||
1CD8 ; ----------------------
|
||
|
||
1CD8 A53E ZCRUSH: LDA OUT+1 ; GET 2ND Z-CHAR
|
||
1CDA 0A ASL A ; SHIFT BITS INTO POSITION
|
||
1CDB 0A ASL A
|
||
1CDC 0A ASL A
|
||
1CDD 0A ASL A
|
||
1CDE 263D ROL OUT ; ALONG WITH 1ST Z-CHAR
|
||
1CE0 0A ASL A
|
||
1CE1 263D ROL OUT
|
||
1CE3 053F ORA OUT+2 ; SUPERIMPOSE 3RD Z-CHAR
|
||
1CE5 853E STA OUT+1
|
||
|
||
1CE7 A541 LDA OUT+4 ; GET 5TH Z-CHAR
|
||
1CE9 0A ASL A ; SHIFT BITS
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 82
|
||
--- Z-STRING HANDLERS ---
|
||
|
||
1CEA 0A ASL A
|
||
1CEB 0A ASL A
|
||
1CEC 0A ASL A
|
||
1CED 2640 ROL OUT+3 ; ALONG WITH 4TH Z-CHAR
|
||
1CEF 0A ASL A
|
||
1CF0 2640 ROL OUT+3
|
||
1CF2 0542 ORA OUT+5 ; SUPERIMPOSE 6TH Z-CHAR
|
||
1CF4 AA TAX ; SAVE HERE
|
||
1CF5 A540 LDA OUT+3 ; GRAB 4TH Z-CHAR
|
||
1CF7 0980 ORA #%10000000 ; SET HIGH BIT
|
||
1CF9 853F STA OUT+2 ; MOVE CRUSHED Z-WORD
|
||
1CFB 8640 STX OUT+3 ; INTO PLACE
|
||
1CFD 60 RTS
|
||
|
||
1CFE ; -----------------------
|
||
1CFE ; CHARSET #2 DECODE TABLE
|
||
1CFE ; -----------------------
|
||
|
||
1CFE 00 CHRTBL: DB 0 ; DUMMY BYTE FOR "DIRECT"
|
||
1CFF 0D DB $0D ; EOL
|
||
1D00 30313233 DB "0123456789.,!?_#"
|
||
1D10 27 DB $27 ; SINGLE QUOTE
|
||
1D11 22 DB $22 ; DOUBLE QUOTE
|
||
1D12 2F5C2D3A DB "/\-:()"
|
||
|
||
END
|
||
INCLUD OBJECTS.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 83
|
||
--- OBJECT & PROPERTY HANDLERS ---
|
||
|
||
|
||
1D18 ; ----------------------------------
|
||
1D18 ; GET ABSOLUTE ADDRESS OF OBJECT [A]
|
||
1D18 ; ----------------------------------
|
||
|
||
1D18 ; EXIT: ADDRESS IN [I]
|
||
|
||
1D18 8511 OBJLOC: STA I+LO ; SAVE LSB FOR ADDING
|
||
|
||
1D1A A200 LDX #0 ; CLEAR MSB
|
||
1D1C 8612 STX I+HI ; FOR SHIFTING
|
||
|
||
1D1E 0A ASL A ; MULTIPLY BY 8
|
||
1D1F 2612 ROL I+HI
|
||
1D21 0A ASL A
|
||
1D22 2612 ROL I+HI
|
||
1D24 0A ASL A
|
||
1D25 2612 ROL I+HI
|
||
|
||
1D27 18 CLC ; ADD TO ITSELF
|
||
1D28 6511 ADC I+LO ; TO GET TIMES 9
|
||
1D2A 9002 BCC OBJ1
|
||
1D2C E612 INC I+HI
|
||
|
||
1D2E 18 OBJ1: CLC
|
||
1D2F 6935 ADC #53 ; NOW ADD 53
|
||
1D31 9002 BCC OBJ2 ; (THE OBJECT TABLE OFFSET)
|
||
1D33 E612 INC I+HI
|
||
|
||
1D35 18 OBJ2: CLC ; NEXT ADD THE ABS ADDR
|
||
1D36 6535 ADC OBJTAB+LO ; OF THE OBJECT TABLE
|
||
1D38 8511 STA I+LO
|
||
|
||
1D3A A512 LDA I+HI
|
||
1D3C 6536 ADC OBJTAB+HI
|
||
1D3E 8512 STA I+HI
|
||
1D40 60 RTS
|
||
|
||
1D41 ; -----------------------------
|
||
1D41 ; GET ADDRESS OF PROPERTY TABLE
|
||
1D41 ; -----------------------------
|
||
|
||
1D41 ; EXIT: [I] HAS ABSOLUTE ADDR OF PROPERTY TABLE
|
||
1D41 ; [Y] HAS OFFSET TO START OF PROP IDS
|
||
|
||
1D41 A505 PROPB: LDA ARG1+LO
|
||
1D43 20181D JSR OBJLOC
|
||
1D46 A007 LDY #7
|
||
1D48 B111 LDA (I),Y ; GET MSB OF P-TABLE ADDRESS
|
||
1D4A 18 CLC
|
||
1D4B 6526 ADC ZCODE ; MAKE IT ABSOLUTE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 84
|
||
--- OBJECT & PROPERTY HANDLERS ---
|
||
|
||
1D4D AA TAX ; AND SAVE HERE
|
||
1D4E C8 INY
|
||
1D4F B111 LDA (I),Y ; NOW GET LSB
|
||
1D51 8511 STA I+LO
|
||
1D53 8612 STX I+HI ; [I] NOW POINTS TO PROP TABLE
|
||
|
||
1D55 A000 LDY #0
|
||
1D57 B111 LDA (I),Y ; GET LENGTH OF SHORT DESC
|
||
1D59 0A ASL A ; WORD-ALIGN IT
|
||
1D5A A8 TAY ; EXPECTED HERE
|
||
1D5B C8 INY ; POINT JUST PAST THE DESCRIPTION
|
||
1D5C 60 RTS
|
||
|
||
1D5D ; -------------------
|
||
1D5D ; FETCH A PROPERTY ID
|
||
1D5D ; -------------------
|
||
|
||
1D5D ; ENTRY: LIKE "PROPB" EXIT
|
||
|
||
1D5D B111 PROPN: LDA (I),Y
|
||
1D5F 291F AND #%00011111 ; MASK OUT LENGTH BITS
|
||
1D61 60 RTS
|
||
|
||
1D62 ; -------------------------------
|
||
1D62 ; FETCH # BYTES IN PROPERTY VALUE
|
||
1D62 ; -------------------------------
|
||
|
||
1D62 ; ENTRY: LIKE "PROPB" EXIT
|
||
|
||
1D62 B111 PROPL: LDA (I),Y
|
||
1D64 4A LSR A ; LENGTH IS IN
|
||
1D65 4A LSR A ; BITS 7-5
|
||
1D66 4A LSR A ; SO SHIFT INTO PLACE
|
||
1D67 4A LSR A
|
||
1D68 4A LSR A
|
||
1D69 60 RTS
|
||
|
||
1D6A ; ----------------------
|
||
1D6A ; POINT TO NEXT PROPERTY
|
||
1D6A ; ----------------------
|
||
|
||
1D6A ; ENTRY: LIKE "PROPB" EXIT
|
||
|
||
1D6A 20621D PROPNX: JSR PROPL ; GET LENGTH OF CURRENT PROP
|
||
1D6D AA TAX ; SAVE HERE
|
||
|
||
1D6E C8 PPX: INY ; LOOP UNTIL
|
||
1D6F CA DEX ; [Y] POINTS TO
|
||
1D70 10FC BPL PPX ; START OF NEXT PROP
|
||
1D72 C8 INY ; CORRECT ALIGNMENT
|
||
1D73 60 RTS
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 85
|
||
--- OBJECT & PROPERTY HANDLERS ---
|
||
|
||
|
||
1D74 ; ----------------
|
||
1D74 ; GET OBJECT FLAGS
|
||
1D74 ; ----------------
|
||
|
||
1D74 ; ENTRY: OBJECT # IN [ARG1], FLAG # IN [ARG2]
|
||
1D74 ; EXIT: FLAG WORD IN [K], BIT ID IN [J],
|
||
1D74 ; FLAG WORD ADDRESS IN [I]
|
||
|
||
1D74 A505 FLAGSU: LDA ARG1+LO
|
||
1D76 20181D JSR OBJLOC ; GET OBJECT ADDR IN [I]
|
||
|
||
1D79 A507 LDA ARG2+LO ; LOOK AT FLAG ID
|
||
1D7B C910 CMP #$10 ; FIRST SET OF FLAGS?
|
||
1D7D 900F BCC FLS1 ; YES, ADDR IN [I] IS CORRECT
|
||
|
||
1D7F E910 SBC #16 ; ELSE ZERO-ALIGN FLAG INDEX
|
||
1D81 AA TAX ; SAVE IT HERE
|
||
|
||
1D82 A511 LDA I+LO ; ADD 2 TO ADDRESS IN [I]
|
||
1D84 18 CLC ; TO POINT TO ADDRESS OF
|
||
1D85 6902 ADC #2 ; 2ND FLAG WORD
|
||
1D87 8511 STA I+LO
|
||
1D89 9002 BCC FLS0
|
||
1D8B E612 INC I+HI
|
||
|
||
1D8D 8A FLS0: TXA ; RESTORE INDEX
|
||
|
||
1D8E 8515 FLS1: STA K+LO ; SAVE FLAG ID HERE
|
||
|
||
1D90 A201 LDX #1 ; INIT THE
|
||
1D92 8613 STX J+LO ; FLAG WORD TO
|
||
1D94 CA DEX ; $0001
|
||
1D95 8614 STX J+HI
|
||
|
||
1D97 A90F LDA #15 ; SUBTRACT THE BIT POSITION
|
||
1D99 38 SEC ; FROM 15
|
||
1D9A E515 SBC K+LO ; TO GET THE SHIFT LOOP
|
||
1D9C AA TAX ; INDEX
|
||
1D9D F007 BEQ FLS2 ; EXIT NOW IF NO SHIFT NEEDED
|
||
|
||
1D9F 0613 FLSL: ASL J+LO ; SHIFT THE BIT
|
||
1DA1 2614 ROL J+HI ; INTO POSITION
|
||
1DA3 CA DEX
|
||
1DA4 D0F9 BNE FLSL
|
||
|
||
1DA6 A000 FLS2: LDY #0 ; MOVE THE FLAG WORD
|
||
1DA8 B111 LDA (I),Y ; INTO [J]
|
||
1DAA 8516 STA K+HI ; FIRST THE MSB
|
||
1DAC C8 INY
|
||
1DAD B111 LDA (I),Y
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- OP SUPPORT & MEMORY MANAGEMENT PAGE 86
|
||
--- OBJECT & PROPERTY HANDLERS ---
|
||
|
||
1DAF 8515 STA K+LO ; THEN THE LSB
|
||
1DB1 60 RTS
|
||
|
||
END
|
||
|
||
INCLUD IO.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 87
|
||
--- GAME I/O: CBM64 ---
|
||
|
||
|
||
1DB2 ; --------------
|
||
1DB2 ; INTERNAL ERROR
|
||
1DB2 ; --------------
|
||
|
||
1DB2 ; ENTRY: ERROR CODE IN [A]
|
||
|
||
1DB2 496E7465 ERRM: DB "Internal error "
|
||
1DC1 30302E ENUMB: DB "00."
|
||
0012 ERRML EQU $-ERRM
|
||
|
||
1DC4 A001 ZERROR: LDY #1 ; CONVERT ERROR BYTE IN [A]
|
||
1DC6 20DD27 ECON: JSR DIV10 ; TO ASCII DECIMAL IN [ENUMB]
|
||
1DC9 0930 ORA #'0'
|
||
1DCB 99C11D STA ENUMB,Y
|
||
1DCE 8A TXA
|
||
1DCF 88 DEY
|
||
1DD0 10F4 BPL ECON
|
||
|
||
1DD2 20CCFF JSR CLRCHN
|
||
1DD5 20831E JSR ZCRLF ; CLEAR BUFFER
|
||
1DD8 A900 LDA #0
|
||
1DDA 8562 STA SCRIPT ; DISABLE SCRIPTING
|
||
|
||
1DDC A2B2 LDX #LOW ERRM
|
||
1DDE A91D LDA #HIGH ERRM
|
||
1DE0 A012 LDY #ERRML
|
||
1DE2 20F021 JSR DLINE
|
||
|
||
1DE5 ; FALL THROUGH ...
|
||
|
||
1DE5 ; ----
|
||
1DE5 ; QUIT
|
||
1DE5 ; ----
|
||
|
||
1DE5 20831E ZQUIT: JSR ZCRLF ; FLUSH BUFFER
|
||
|
||
1DE8 A2FB LDX #LOW TOQ
|
||
1DEA A91D LDA #HIGH TOQ
|
||
1DEC A00E LDY #TOQL
|
||
1DEE 20F021 JSR DLINE ; "END OF STORY"
|
||
|
||
1DF1 A502 LDA FAST ; FAST-READ ENGAGED?
|
||
1DF3 F003 BEQ FREEZE
|
||
1DF5 202629 JSR FOFF ; DISENGAGE IF SO
|
||
1DF8 4CF81D FREEZE: JMP FREEZE ; AND STOP
|
||
|
||
1DFB 456E6420 TOQ: DB "End of story."
|
||
1E08 0D DB EOL
|
||
000E TOQL EQU $-TOQ
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 88
|
||
--- GAME I/O: CBM64 ---
|
||
|
||
1E09 ; -------
|
||
1E09 ; RESTART
|
||
1E09 ; -------
|
||
|
||
1E09 20831E ZSTART: JSR ZCRLF
|
||
|
||
1E0C A502 LDA FAST ; FAST-READ?
|
||
1E0E F003 BEQ DOSTRT ; NO, GO
|
||
1E10 202629 JSR FOFF ; ELSE DISENGAGE
|
||
|
||
1E13 AD112A DOSTRT: LDA ZBEGIN+ZSCRIP+1 ; SAVE SCRIPT STATE
|
||
1E16 2901 AND #%00000001 ; FOR LATER
|
||
1E18 8D0322 STA SFLAG ; (BM 5/14/85)
|
||
|
||
1E1B 4C7F0E JMP WARM1 ; AND DO A WARMSTART
|
||
|
||
1E1E ; --------------------
|
||
1E1E ; PRINT VERSION NUMBER
|
||
1E1E ; --------------------
|
||
|
||
1E1E 43424D20 VERS: DB "CBM 64 Version D"
|
||
1E2E 0D DB EOL
|
||
0011 VERSL EQU $-VERS
|
||
|
||
1E2F 20831E VERNUM: JSR ZCRLF
|
||
|
||
1E32 A21E LDX #LOW VERS
|
||
1E34 A91E LDA #HIGH VERS
|
||
1E36 A011 LDY #VERSL
|
||
1E38 4CF021 JMP DLINE
|
||
|
||
1E3B ; --------------------------
|
||
1E3B ; RETURN TOP RAM PAGE IN [A]
|
||
1E3B ; --------------------------
|
||
|
||
1E3B A9CF MEMTOP: LDA #$CF ; IT'S A GIVEN
|
||
1E3D 60 RTS
|
||
|
||
1E3E ; --------------------------------
|
||
1E3E ; RETURN RANDOM BYTES IN [A] & [X]
|
||
1E3E ; --------------------------------
|
||
|
||
1E3E AD1BD4 RANDOM: LDA RAND ; SOMETHING FROM HERE
|
||
1E41 AE12D0 LDX RASTER ; AND HERE
|
||
1E44 60 RTS
|
||
|
||
1E45 ; -------------------
|
||
1E45 ; Z-PRINT A CHARACTER
|
||
1E45 ; -------------------
|
||
|
||
1E45 ; ENTRY: ASCII CHAR IN [A]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 89
|
||
--- GAME I/O: CBM64 ---
|
||
|
||
|
||
1E45 C90D COUT: CMP #EOL ; IF EOL,
|
||
1E47 F03A BEQ ZCRLF ; DO IT!
|
||
1E49 C920 CMP #SPACE ; IGNORE ALL OTHER
|
||
1E4B 900B BCC CEX ; CONTROLS
|
||
|
||
1E4D A660 LDX LENGTH ; ELSE GET LINE POINTER
|
||
1E4F 9D0002 STA LBUFF,X ; ADD CHAR TO BUFFER
|
||
1E52 E027 CPX #XSIZE ; END OF LINE?
|
||
1E54 B003 BCS FLUSH ; YES, FLUSH THE LINE
|
||
1E56 E660 INC LENGTH ; ELSE UPDATE POINTER
|
||
|
||
1E58 60 CEX: RTS
|
||
|
||
1E59 ; -------------------
|
||
1E59 ; FLUSH OUTPUT BUFFER
|
||
1E59 ; -------------------
|
||
|
||
1E59 ; ENTRY: LENGTH OF BUFFER IN [X]
|
||
|
||
1E59 A920 FLUSH: LDA #SPACE
|
||
|
||
1E5B DD0002 FL0: CMP LBUFF,X ; FIND LAST SPACE CHAR
|
||
1E5E F005 BEQ FL1 ; IN THE LINE
|
||
1E60 CA DEX
|
||
1E61 D0F8 BNE FL0 ; IF NONE FOUND,
|
||
1E63 A227 LDX #XSIZE ; FLUSH ENTIRE LINE
|
||
|
||
1E65 8661 FL1: STX OLDLEN ; SAVE OLD LINE POS HERE
|
||
1E67 8660 STX LENGTH ; MAKE IT THE NEW LINE LENGTH
|
||
|
||
1E69 20831E JSR ZCRLF ; PRINT LINE UP TO LAST SPACE
|
||
|
||
1E6C ; START NEW LINE WITH REMAINDER OF OLD
|
||
|
||
1E6C A661 LDX OLDLEN ; GET OLD LINE POS
|
||
1E6E A000 LDY #0 ; START NEW LINE AT BEGINNING
|
||
1E70 E8 FL2: INX
|
||
1E71 E027 CPX #XSIZE ; CONTINUE IF
|
||
1E73 9005 BCC FL3 ; INSIDE OR
|
||
1E75 F003 BEQ FL3 ; AT END OF LINE
|
||
1E77 8460 STY LENGTH ; ELSE SET NEW LINE LENGTH
|
||
1E79 60 RTS
|
||
|
||
1E7A BD0002 FL3: LDA LBUFF,X ; GET CHAR FROM OLD LINE
|
||
1E7D 990002 STA LBUFF,Y ; MOVE TO START OF NEW LINE
|
||
1E80 C8 INY ; UPDATE LENGTH OF NEW LINE
|
||
1E81 D0ED BNE FL2
|
||
|
||
1E83 ; ---------------
|
||
1E83 ; CARRIAGE RETURN
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 90
|
||
--- GAME I/O: CBM64 ---
|
||
|
||
1E83 ; ---------------
|
||
|
||
1E83 E665 ZCRLF: INC LINCNT ; NEW LINE GOING OUT
|
||
1E85 A565 LDA LINCNT ; IS IT TIME TO
|
||
1E87 C566 CMP LMAX ; PRINT "MORE" YET?
|
||
1E89 9041 BCC CR1 ; NO, CONTINUE
|
||
|
||
1E8B ; SCREEN FULL; PRINT "MORE"
|
||
|
||
1E8B 20081F JSR ZUSL ; UPDATE STATUS LINE
|
||
|
||
1E8E A900 LDA #0
|
||
1E90 8565 STA LINCNT ; RESET LINE COUNTER
|
||
1E92 8D8602 STA COLOR ; PRINT "MORE" IN BLACK
|
||
1E95 85C6 STA NDX ; CLEAR QUEUE
|
||
|
||
1E97 38 SEC
|
||
1E98 20F0FF JSR PLOT ; GET CURSOR POSITION
|
||
1E9B 8463 STY OLDX
|
||
1E9D 8664 STX OLDY
|
||
|
||
1E9F A2EF LDX #LOW MORE
|
||
1EA1 A91E LDA #HIGH MORE
|
||
1EA3 A006 LDY #MOREL
|
||
1EA5 20F021 JSR DLINE ; PRINT "MORE" DIRECTLY
|
||
|
||
1EA8 20E4FF ZCR0: JSR GETIN ; GET ANY KEYPRESS
|
||
1EAB AA TAX
|
||
1EAC F0FA BEQ ZCR0
|
||
|
||
1EAE A463 LDY OLDX
|
||
1EB0 A664 LDX OLDY
|
||
1EB2 18 CLC
|
||
1EB3 20F0FF JSR PLOT ; RESTORE CURSOR
|
||
|
||
1EB6 A901 LDA #1
|
||
1EB8 8D8602 STA COLOR ; SWITCH BACK TO WHITE
|
||
|
||
1EBB A2F5 LDX #LOW MCLR
|
||
1EBD A91E LDA #HIGH MCLR
|
||
1EBF A006 LDY #MOREL
|
||
1EC1 20F021 JSR DLINE ; RUB OUT "MORE"
|
||
|
||
1EC4 A463 LDY OLDX
|
||
1EC6 A664 LDX OLDY
|
||
1EC8 18 CLC
|
||
1EC9 20F0FF JSR PLOT ; RESTORE CURSOR AGAIN
|
||
|
||
1ECC A660 CR1: LDX LENGTH
|
||
1ECE A90D LDA #EOL ; INSTALL EOL AT
|
||
1ED0 9D0002 STA LBUFF,X ; END OF CURRENT LINE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 91
|
||
--- GAME I/O: CBM64 ---
|
||
|
||
1ED3 E660 INC LENGTH ; UPDATE LINE LENGTH
|
||
|
||
1ED5 A460 LINOUT: LDY LENGTH ; IF BUFFER EMPTY,
|
||
1ED7 F011 BEQ LINEX ; DON'T PRINT ANYTHING
|
||
|
||
1ED9 846F STY PRLEN ; SAVE LENGTH HERE FOR "PPRINT"
|
||
1EDB A200 LDX #0 ; SEND CONTENTS OF [LBUFF]
|
||
1EDD BD0002 LOUT: LDA LBUFF,X ; TO SCREEN
|
||
1EE0 202821 JSR CHAR
|
||
1EE3 E8 INX
|
||
1EE4 88 DEY
|
||
1EE5 D0F6 BNE LOUT
|
||
|
||
1EE7 200422 JSR PPRINT ; PRINT [LBUFF] IF ENABLED
|
||
|
||
1EEA A900 LINEX: LDA #0 ; RESET LINE LENGTH
|
||
1EEC 8560 STA LENGTH ; TO ZERO
|
||
1EEE 60 RTS ; AND RETURN
|
||
|
||
1EEF 5B4D4F52 MORE: DB "[MORE]"
|
||
0006 MOREL EQU $-MORE
|
||
|
||
1EF5 20202020 MCLR: DB " "
|
||
|
||
1EFB ; ----------------------
|
||
1EFB ; UPDATE THE STATUS LINE
|
||
1EFB ; ----------------------
|
||
|
||
1EFB 53636F72 SCORE: DB "Score: "
|
||
0007 SCOREL EQU $-SCORE
|
||
|
||
1F02 54696D65 CLOCK: DB "Time: "
|
||
0006 CLOCKL EQU $-CLOCK
|
||
|
||
1F08 38 ZUSL: SEC ; SAVE THE CURRENT
|
||
1F09 20F0FF JSR PLOT ; CURSOR POSITION
|
||
1F0C 8463 STY OLDX
|
||
1F0E 8664 STX OLDY
|
||
|
||
1F10 A560 LDA LENGTH ; SAVE ALL
|
||
1F12 48 PHA ; STRING-PRINTING
|
||
1F13 A521 LDA MPCH ; VARIABLES
|
||
1F15 48 PHA
|
||
1F16 A520 LDA MPCM
|
||
1F18 48 PHA
|
||
1F19 A51F LDA MPCL
|
||
1F1B 48 PHA
|
||
1F1C A54D LDA TSET
|
||
1F1E 48 PHA
|
||
1F1F A54C LDA PSET
|
||
1F21 48 PHA
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 92
|
||
--- GAME I/O: CBM64 ---
|
||
|
||
1F22 A552 LDA ZWORD+HI
|
||
1F24 48 PHA
|
||
1F25 A551 LDA ZWORD+LO
|
||
1F27 48 PHA
|
||
1F28 A550 LDA ZFLAG
|
||
1F2A 48 PHA
|
||
1F2B A55E LDA DIGITS
|
||
1F2D 48 PHA
|
||
|
||
1F2E A227 LDX #XSIZE
|
||
1F30 BD0002 USL0: LDA LBUFF,X ; MOVE CONTENTS OF [LBUFF]
|
||
1F33 9D200D STA BUFSAV,X ; TO [BUFSAV]
|
||
1F36 A920 LDA #SPACE ; CLEAR
|
||
1F38 9D0002 STA LBUFF,X ; [LBUFF] WITH SPACES
|
||
1F3B CA DEX
|
||
1F3C 10F2 BPL USL0
|
||
|
||
1F3E A900 LDA #0
|
||
1F40 8560 STA LENGTH ; RESET LINE LENGTH
|
||
1F42 8562 STA SCRIPT ; DISABLE SCRIPTING
|
||
1F44 8D8602 STA COLOR ; PRINT STATUS LINE IN BLACK
|
||
|
||
1F47 A913 LDA #$13 ; HOME THE
|
||
1F49 20D2FF JSR CHROUT ; CURSOR
|
||
1F4C A912 LDA #$12 ; PRINT IN
|
||
1F4E 20D2FF JSR CHROUT ; INVERSE VIDEO
|
||
|
||
1F51 ; PRINT ROOM DESCRIPTION
|
||
|
||
1F51 A910 LDA #16 ; GLOBAL VAR #16 (ROOM ID)
|
||
1F53 20A310 JSR GETVRG ; GET IT INTO [VALUE]
|
||
1F56 A50F LDA VALUE+LO
|
||
1F58 209D13 JSR PRNTDC ; PRINT SHORT ROOM DESCRIPTION
|
||
|
||
1F5B A918 LDA #24 ; MOVE LINE INDEX UP
|
||
1F5D 8560 STA LENGTH ; TO TIME/SCORE POSITION
|
||
|
||
1F5F A911 LDA #17 ; GLOBAL VAR #17 (SCORE/HOURS)
|
||
1F61 20A310 JSR GETVRG ; GET IT INTO [VALUE]
|
||
|
||
1F64 A55F LDA TIMEFL ; GET MODE FLAG
|
||
1F66 D032 BNE DOTIME ; USE TIME MODE IF NON-ZERO
|
||
|
||
1F68 ; PRINT "SCORE"
|
||
|
||
1F68 A953 LDA #'S'
|
||
1F6A 20451E JSR COUT
|
||
1F6D A963 LDA #'c'
|
||
1F6F 20451E JSR COUT
|
||
1F72 A96F LDA #'o'
|
||
1F74 20451E JSR COUT
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 93
|
||
--- GAME I/O: CBM64 ---
|
||
|
||
1F77 A972 LDA #'r'
|
||
1F79 20451E JSR COUT
|
||
1F7C A965 LDA #'e'
|
||
1F7E 20451E JSR COUT
|
||
1F81 A93A LDA #':'
|
||
1F83 20451E JSR COUT
|
||
1F86 A920 LDA #SPACE
|
||
1F88 20451E JSR COUT
|
||
|
||
1F8B A50F LDA VALUE+LO ; MOVE SCORE VALUE
|
||
1F8D 8556 STA QUOT+LO ; INTO [QUOT]
|
||
1F8F A510 LDA VALUE+HI ; FOR PRINTING
|
||
1F91 8557 STA QUOT+HI
|
||
1F93 20F917 JSR NUMBER ; PRINT SCORE VALUE IN DECIMAL
|
||
|
||
1F96 A92F LDA #'/' ; PRINT A SLASH
|
||
1F98 D035 BNE MOVMIN ; BRANCH ALWAYS
|
||
|
||
1F9A ; PRINT "TIME"
|
||
|
||
1F9A A954 DOTIME: LDA #'T'
|
||
1F9C 20451E JSR COUT
|
||
1F9F A969 LDA #'i'
|
||
1FA1 20451E JSR COUT
|
||
1FA4 A96D LDA #'m'
|
||
1FA6 20451E JSR COUT
|
||
1FA9 A965 LDA #'e'
|
||
1FAB 20451E JSR COUT
|
||
1FAE A93A LDA #':'
|
||
1FB0 20451E JSR COUT
|
||
1FB3 A920 LDA #SPACE
|
||
1FB5 20451E JSR COUT
|
||
|
||
1FB8 A50F LDA VALUE+LO ; 00 IS REALLY 24
|
||
1FBA D002 BNE DT0
|
||
1FBC A918 LDA #24
|
||
1FBE C90D DT0: CMP #13 ; IS HOURS > 12,
|
||
1FC0 9002 BCC DT1
|
||
1FC2 E90C SBC #12 ; CONVERT TO 1-12
|
||
1FC4 8556 DT1: STA QUOT+LO ; MOVE FOR PRINTING
|
||
1FC6 A900 LDA #0
|
||
1FC8 8557 STA QUOT+HI ; CLEAR MSB
|
||
1FCA 20F917 JSR NUMBER
|
||
|
||
1FCD A93A LDA #':' ; COLON
|
||
|
||
1FCF 20451E MOVMIN: JSR COUT ; PRINT SLASH OR COLON
|
||
|
||
1FD2 A912 LDA #18 ; GLOBAL VAR #18 (MOVES/MINUTES)
|
||
1FD4 20A310 JSR GETVRG ; GET IT INTO [VALUE]
|
||
1FD7 A50F LDA VALUE+LO ; MOVE TO [QUOT]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 94
|
||
--- GAME I/O: CBM64 ---
|
||
|
||
1FD9 8556 STA QUOT+LO ; FOR EVENTUAL PRINTING
|
||
1FDB A510 LDA VALUE+HI
|
||
1FDD 8557 STA QUOT+HI
|
||
|
||
1FDF A55F LDA TIMEFL ; WHICH MODE?
|
||
1FE1 D006 BNE DOMINS ; TIME IF NZ
|
||
|
||
1FE3 ; PRINT NUMBER OF MOVES
|
||
|
||
1FE3 20F917 JSR NUMBER ; SHOW # MOVES
|
||
1FE6 4C1520 JMP STATEX ; ALL DONE
|
||
|
||
1FE9 ; PRINT MINUTES
|
||
|
||
1FE9 A50F DOMINS: LDA VALUE+LO ; CHECK MINUTES
|
||
1FEB C90A CMP #10 ; IF MORE THAN TEN
|
||
1FED B005 BCS DOM0 ; CONTINUE
|
||
|
||
1FEF A930 LDA #'0' ; ELSE PRINT A
|
||
1FF1 20451E JSR COUT ; PADDING "0" FIRST
|
||
|
||
1FF4 20F917 DOM0: JSR NUMBER ; SHOW MINUTES
|
||
|
||
1FF7 A920 LDA #SPACE
|
||
1FF9 20451E JSR COUT ; SEPARATE THINGS
|
||
|
||
1FFC A911 LDA #17 ; CHECK "HOURS" AGAIN
|
||
1FFE 20A310 JSR GETVRG
|
||
2001 A50F LDA VALUE+LO
|
||
2003 C90C CMP #12 ; PAST NOON?
|
||
2005 B004 BCS DOPM ; YES, PRINT "PM"
|
||
|
||
2007 A941 LDA #'A' ; ELSE PRINT "AM"
|
||
2009 D002 BNE DOXM ; BRANCH ALWAYS
|
||
|
||
200B A950 DOPM: LDA #'P'
|
||
|
||
200D 20451E DOXM: JSR COUT
|
||
2010 A94D LDA #'M'
|
||
2012 20451E JSR COUT
|
||
|
||
2015 ; STATUS LINE READY
|
||
|
||
2015 A928 STATEX: LDA #40 ; PRINT THE ENTIRE
|
||
2017 8560 STA LENGTH ; STATUS LINE
|
||
2019 20CC1E JSR CR1
|
||
|
||
201C A227 LDX #XSIZE ; RESTORE OLD [LBUFF]
|
||
201E BD200D USLX: LDA BUFSAV,X
|
||
2021 9D0002 STA LBUFF,X
|
||
2024 CA DEX
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 95
|
||
--- GAME I/O: CBM64 ---
|
||
|
||
2025 10F7 BPL USLX
|
||
|
||
2027 68 PLA ; RESTORE ALL
|
||
2028 855E STA DIGITS ; SAVED VARIABLES
|
||
202A 68 PLA
|
||
202B 8550 STA ZFLAG
|
||
202D 68 PLA
|
||
202E 8551 STA ZWORD+LO
|
||
2030 68 PLA
|
||
2031 8552 STA ZWORD+HI
|
||
2033 68 PLA
|
||
2034 854C STA PSET
|
||
2036 68 PLA
|
||
2037 854D STA TSET
|
||
2039 68 PLA
|
||
203A 851F STA MPCL
|
||
203C 68 PLA
|
||
203D 8520 STA MPCM
|
||
203F 68 PLA
|
||
2040 8521 STA MPCH
|
||
2042 68 PLA
|
||
2043 8560 STA LENGTH
|
||
|
||
2045 A664 LDX OLDY ; RESTORE CURSOR
|
||
2047 A463 LDY OLDX
|
||
2049 18 CLC
|
||
204A 20F0FF JSR PLOT
|
||
|
||
204D A2FF LDX #$FF
|
||
204F 8662 STX SCRIPT ; RE-ENABLE SCRIPTING
|
||
2051 E8 INX ; = 0
|
||
2052 8622 STX MPCFLG ; INVALIDATE [MPC]
|
||
2054 E8 INX ; = 1
|
||
2055 8E8602 STX COLOR ; PRINT IN WHITE AGAIN
|
||
2058 60 RTS
|
||
|
||
END
|
||
INCLUD MACHINE.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 96
|
||
--- MACHINE-DEPENDENT I/O: CBM64 ---
|
||
|
||
|
||
2059 ; ----------------------------
|
||
2059 ; FETCH ASCII KEYCODE INTO [A]
|
||
2059 ; ----------------------------
|
||
|
||
2059 ; EXIT: ASCII IN [A] & [IOCHAR]
|
||
|
||
00E0 CYCLE EQU $E0 ; SHORT BLINK CYCLE
|
||
|
||
2059 8A GETKEY: TXA ; SAVE [X] & [Y]
|
||
205A 48 PHA
|
||
205B 98 TYA
|
||
205C 48 PHA
|
||
|
||
205D A2FF GKEY0: LDX #$FF
|
||
205F 8E4003 STX CURSOR ; FORCE THE CURSOR "ON"
|
||
2062 E8 INX ; = 0
|
||
2063 867B STX BLINK+LO ; RESET THE BLINK COUNTER
|
||
2065 867C STX BLINK+HI ; FOR A LONG DELAY
|
||
|
||
2067 38 SEC ; GET CURSOR POSITION
|
||
2068 20F0FF JSR PLOT ; [Y]=XPOS, [X]=YPOS
|
||
|
||
206B 8A TXA ; CALC SPRITE Y-POS
|
||
206C 0A ASL A
|
||
206D 0A ASL A
|
||
206E 0A ASL A
|
||
206F 18 CLC
|
||
2070 6939 ADC #57
|
||
2072 8D01D0 STA SP0Y
|
||
|
||
2075 98 TYA ; GET X-POS INTO [A]
|
||
2076 C928 CMP #40 ; STRIP OFF
|
||
2078 9002 BCC NOLOG ; LOGICAL LINE OFFSET
|
||
207A E928 SBC #40
|
||
|
||
207C A200 NOLOG: LDX #0
|
||
207E C91D CMP #29 ; IF X-POS < 29
|
||
2080 9001 BCC CURX ; MSB OF SPRITE POS IS ZERO
|
||
2082 E8 INX ; ELSE SET BIT 0
|
||
2083 8E10D0 CURX: STX MSIGX ; OF X-POS MSB
|
||
|
||
2086 0A ASL A ; CALC LSB OF SPRITE X-POS
|
||
2087 0A ASL A
|
||
2088 0A ASL A
|
||
2089 18 CLC
|
||
208A 6918 ADC #24
|
||
208C 8D00D0 STA SP0X
|
||
|
||
208F 20E4FF GKEY1: JSR GETIN ; GET A KEY
|
||
2092 AA TAX ; SAVE HERE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 97
|
||
--- MACHINE-DEPENDENT I/O: CBM64 ---
|
||
|
||
|
||
2093 E67B INC BLINK+LO ; TIME TO BLINK YET?
|
||
2095 D010 BNE NOBLIN ; NOT TILL BOTH BLINK TIMERS
|
||
2097 E67C INC BLINK+HI ; ARE ZERO
|
||
2099 D00C BNE NOBLIN
|
||
|
||
209B A9E0 LDA #CYCLE ; RESET MSB OF BLINK COUNTER
|
||
209D 857C STA BLINK+HI ; FOR SHORT BLINK INTERVAL
|
||
|
||
209F AD4003 LDA CURSOR ; FLIP THE CURSOR
|
||
20A2 49FF EOR #$FF ; SHAPE
|
||
20A4 8D4003 STA CURSOR ; AND UPDATE IT
|
||
|
||
20A7 8A NOBLIN: TXA ; KEY BEING PRESSED?
|
||
20A8 F0E5 BEQ GKEY1 ; NOT IF CODE WAS ZERO
|
||
|
||
20AA ; CONVERT & MASK KEYCODE IN [A]
|
||
|
||
20AA C941 CMP #'A' ; CONVERT UNSHIFTED ALPHA
|
||
20AC 9006 BCC MASK ; TO ASCII LOWER CASE
|
||
20AE C95B CMP #'Z'+1
|
||
20B0 B002 BCS MASK
|
||
20B2 6920 ADC #$20
|
||
|
||
20B4 297F MASK: AND #%01111111 ; SCREEN OUT SHIFTS
|
||
|
||
20B6 C90D CMP #EOL ; EOL?
|
||
20B8 F02A BEQ TICK
|
||
20BA C914 CMP #BACKSP ; BACKSPACE?
|
||
20BC F026 BEQ TICK
|
||
20BE C920 CMP #SPACE ; ANYTHING ELSE < "SPACE"
|
||
20C0 901C BCC BADKEY ; IS BAD
|
||
|
||
20C2 C93C CMP #'<' ; CHANGE "<"
|
||
20C4 D004 BNE MASK0 ; TO ","
|
||
20C6 A92C LDA #','
|
||
20C8 D01A BNE TICK
|
||
|
||
20CA C93E MASK0: CMP #'>' ; CHANGE ">"
|
||
20CC D004 BNE MASK1 ; TO "."
|
||
20CE A92E LDA #'.'
|
||
20D0 D012 BNE TICK
|
||
|
||
20D2 C97B MASK1: CMP #'z'+1 ; PASS L-C ALPHA
|
||
20D4 B008 BCS BADKEY
|
||
20D6 C961 CMP #'a'
|
||
20D8 B00A BCS TICK
|
||
|
||
20DA C95B CMP #'Z'+1 ; PASS U-C ALPHA
|
||
20DC 9006 BCC TICK ; AND OTHER ASCII CHARS
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 98
|
||
--- MACHINE-DEPENDENT I/O: CBM64 ---
|
||
|
||
20DE 20E422 BADKEY: JSR BOOP ; REJECT BAD KEYPRESS
|
||
20E1 4C5D20 JMP GKEY0 ; AND TRY AGAIN
|
||
|
||
20E4 ; "CLICK" THE KEY
|
||
|
||
20E4 8567 TICK: STA IOCHAR ; SAVE KEYCODE HERE
|
||
|
||
20E6 A91E LDA #30
|
||
20E8 8D00D4 STA FRELO1 ; FREQ LSB
|
||
20EB A986 LDA #134
|
||
20ED 8D01D4 STA FREHI1 ; FREQ MSB
|
||
20F0 A900 LDA #0
|
||
20F2 A8 TAY ; SET UP CLICK DELAY
|
||
20F3 8D06D4 STA SUREL1 ; ZERO SUSTAIN
|
||
20F6 A98F LDA #%10001111
|
||
20F8 8D18D4 STA SIGVOL ; FULL VOLUME, VOICE #3 OFF
|
||
20FB A911 LDA #%00010001
|
||
20FD 8D04D4 STA VCREG1 ; ACTIVATE TRIANGLE WAVE
|
||
|
||
2100 88 CLICK: DEY ; [Y] = 0 ON ENTRY
|
||
2101 D0FD BNE CLICK
|
||
|
||
2103 8C04D4 STY VCREG1 ; STOP THE SOUND
|
||
2106 A980 LDA #%10000000 ; ZERO VOLUME
|
||
2108 8D18D4 STA SIGVOL ; WITH VOICE #3 OFF
|
||
|
||
210B 68 PLA ; RESTORE [X] & [Y]
|
||
210C A8 TAY
|
||
210D 68 PLA
|
||
210E AA TAX
|
||
210F A567 LDA IOCHAR ; RESTORE CODE INTO [A]
|
||
2111 60 RTS
|
||
|
||
2112 ; -------------------------
|
||
2112 ; OUTPUT AN ASCII CHARACTER
|
||
2112 ; -------------------------
|
||
|
||
2112 C961 LETTER: CMP #'a' ; LOWER-CASE?
|
||
2114 9005 BCC LET0 ; NO, CONTINUE
|
||
2116 295F AND #%01011111 ; ELSE MASK FOR LOWER-CASE
|
||
2118 4CD2FF JMP CHROUT
|
||
|
||
211B C941 LET0: CMP #'A' ; UPPER-CASE?
|
||
211D 9006 BCC LETEX
|
||
211F C95B CMP #'Z'+1
|
||
2121 B002 BCS LETEX
|
||
2123 0920 ORA #%00100000 ; MAKE UPPER
|
||
2125 4CD2FF LETEX: JMP CHROUT
|
||
|
||
2128 ; -----------------
|
||
2128 ; PRINT CHAR IN [A]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 99
|
||
--- MACHINE-DEPENDENT I/O: CBM64 ---
|
||
|
||
2128 ; -----------------
|
||
|
||
2128 8567 CHAR: STA IOCHAR ; SAVE HERE
|
||
212A 8A TXA ; SAVE [X] AND [Y]
|
||
212B 48 PHA
|
||
212C 98 TYA
|
||
212D 48 PHA
|
||
|
||
212E 38 SEC ; GET CURSOR X- AND Y-POS
|
||
212F 20F0FF JSR PLOT ; INTO [Y] AND [X], RESPECTIVELY
|
||
2132 98 TYA
|
||
2133 C928 CMP #40 ; STRIP OFF THE
|
||
2135 9003 BCC CHKEOL ; LOGICAL LINE OFFSET
|
||
2137 E928 SBC #40 ; UPDATE [Y] IF NECESSARY
|
||
2139 A8 TAY
|
||
|
||
213A A567 CHKEOL: LDA IOCHAR ; RESTORE CHAR
|
||
213C C90D CMP #EOL ; IS IT EOL?
|
||
213E F047 BEQ OUTEOL ; YES, SPECIAL HANDLING
|
||
|
||
2140 ; HANDLE A NON-EOL CHAR
|
||
|
||
2140 E017 CPX #YSIZE-1 ; ON LAST SCREEN LINE?
|
||
2142 9039 BCC NOSCRL ; NO, NO SCROLL NEEDED
|
||
2144 C027 CPY #XSIZE ; LAST CHAR ON LINE?
|
||
2146 9035 BCC NOSCRL ; NO, DON'T SCROLL
|
||
|
||
2148 ; SCROLL THE SCREEN
|
||
|
||
2148 CA DOSCRL: DEX ; PUSH CURSOR UP ONE LINE
|
||
2149 18 CLC
|
||
214A 20F0FF JSR PLOT ; RESET THE CURSOR
|
||
|
||
214D A668 LDX SLINE ; GET CURRENT SCROLL LINE
|
||
|
||
214F E018 SRL0: CPX #YSIZE
|
||
2151 F020 BEQ SRL2 ; SCROLL DONE
|
||
|
||
2153 BD5823 LDA LOLINE,X ; GET ADDR OF DEST LINE
|
||
2156 856C STA LTO+LO ; INTO [LTO]
|
||
2158 BD7123 LDA HILINE,X
|
||
215B 856D STA LTO+HI
|
||
|
||
215D E8 INX
|
||
215E BD5823 LDA LOLINE,X ; GET ADDR OF SOURCE LINE
|
||
2161 856A STA LFROM+LO ; INTO [LFROM]
|
||
2163 BD7123 LDA HILINE,X
|
||
2166 856B STA LFROM+HI
|
||
|
||
2168 A027 LDY #XSIZE
|
||
216A B16A SRL1: LDA (LFROM),Y ; MOVE SOURCE LINE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 100
|
||
--- MACHINE-DEPENDENT I/O: CBM64 ---
|
||
|
||
216C 916C STA (LTO),Y ; TO DEST LINE
|
||
216E 88 DEY
|
||
216F 10F9 BPL SRL1
|
||
|
||
2171 30DC BMI SRL0 ; LOOP TILL [X] = YSIZE
|
||
|
||
2173 A227 SRL2: LDX #XSIZE
|
||
2175 A920 LDA #SPACE
|
||
2177 9DC007 SRL3: STA SCREEN+960,X ; CLEAR LAST LINE
|
||
217A CA DEX ; OF SCREEN RAM
|
||
217B 10FA BPL SRL3
|
||
|
||
217D A567 NOSCRL: LDA IOCHAR ; RESTORE CHAR
|
||
217F 201221 JSR LETTER ; OFF TO THE SCREEN!
|
||
2182 68 PLA ; RESTORE [X] AND [Y]
|
||
2183 A8 TAY
|
||
2184 68 PLA
|
||
2185 AA TAX
|
||
2186 60 RTS
|
||
|
||
2187 ; HANDLE EOL
|
||
|
||
2187 E017 OUTEOL: CPX #YSIZE-1 ; LAST SCREEN LINE?
|
||
2189 90F2 BCC NOSCRL ; NO, DON'T SCROLL
|
||
218B B0BB BCS DOSCRL ; ELSE SCROLL
|
||
|
||
218D ; ---------------------
|
||
218D ; FETCH A LINE OF INPUT
|
||
218D ; ---------------------
|
||
|
||
218D ; ENTRY: ABS ADDR OF READ BUFFER IN [ARG1]
|
||
218D ; EXIT: # CHARS READ IN [A]
|
||
|
||
218D 20D51E INPUT: JSR LINOUT ; FLUSH [LBUFF]
|
||
|
||
2190 205524 JSR CURSON ; ACTIVATE CURSOR, CLEAR KEY QUEUE
|
||
|
||
2193 A000 LDY #0
|
||
2195 8465 STY LINCNT ; RESET LINE COUNT
|
||
|
||
2197 205920 INLOOP: JSR GETKEY ; GET ASCII INTO [A] AND [IOCHAR]
|
||
|
||
219A C90D CMP #EOL ; EOL?
|
||
219C F02A BEQ ENDLIN ; LINE DONE IF SO
|
||
219E C914 CMP #BACKSP ; BACKSPACE?
|
||
21A0 F01C BEQ BACKUP ; SPECIAL HANDLING
|
||
|
||
21A2 990002 STA LBUFF,Y ; ELSE ADD CHAR TO INPUT BUFFER
|
||
21A5 C8 INY ; NEXT POSITION IN LINE
|
||
|
||
21A6 202821 SHOWIT: JSR CHAR ; SEND TO SCREEN
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 101
|
||
--- MACHINE-DEPENDENT I/O: CBM64 ---
|
||
|
||
|
||
21A9 C04D CPY #77 ; 2 SCREEN LINES FULL?
|
||
21AB 90EA BCC INLOOP ; NO, GET ANOTHER CHAR
|
||
|
||
21AD ; HANDLE LINE OVERFLOW
|
||
|
||
21AD 205920 NOMORE: JSR GETKEY
|
||
21B0 C90D CMP #EOL ; IF EOL,
|
||
21B2 F014 BEQ ENDLIN ; WRAP UP THE LINE
|
||
21B4 C914 CMP #BACKSP ; BACKSPACE
|
||
21B6 F006 BEQ BACKUP ; IS OKAY TOO
|
||
21B8 20E422 JSR BOOP ; ELSE COMPLAIN
|
||
21BB 4CAD21 JMP NOMORE ; AND INSIST
|
||
|
||
21BE ; HANDLE BACKSPACE
|
||
|
||
21BE 88 BACKUP: DEY ; BACK UP THE POINTER
|
||
21BF 10E5 BPL SHOWIT ; SEND BS IF NOT START OF LINE
|
||
21C1 20E422 JSR BOOP ; ELSE SCREAM WITH PAIN
|
||
21C4 A000 LDY #0 ; RESET POINTER
|
||
21C6 F0CF BEQ INLOOP ; AND WAIT FOR SOMETHING BETTER
|
||
|
||
21C8 ; HANDLE END OF LINE
|
||
|
||
21C8 990002 ENDLIN: STA LBUFF,Y ; SHIP EOL TO BUFFER
|
||
21CB C8 INY ; UPDATE INDEX
|
||
21CC 8445 STY LINLEN ; SAVE HERE FOR "READ"
|
||
21CE 846F STY PRLEN ; AND HERE FOR "PPRINT"
|
||
21D0 A200 LDX #0
|
||
21D2 8E15D0 STX SPENA ; DISABLE CURSOR DMA
|
||
21D5 202821 JSR CHAR ; AND SEND EOL TO SCREEN
|
||
|
||
21D8 ; MOVE [LBUFF] TO [ARG1] W/LC CONVERSION
|
||
|
||
21D8 B9FF01 LEX1: LDA LBUFF-1,Y ; GET A CHAR FROM [LBUFF]
|
||
21DB C941 CMP #'A' ; IF CHAR IS ALPHA,
|
||
21DD 9006 BCC LEX2 ; CONVERT TO LOWER CASE
|
||
21DF C95B CMP #'Z'+1
|
||
21E1 B002 BCS LEX2
|
||
21E3 6920 ADC #$20
|
||
21E5 9105 LEX2: STA (ARG1),Y ; MOVE CHAR TO INPUT BUFFER AT [ARG1]
|
||
21E7 88 DEY ; LOOP TILL
|
||
21E8 10EE BPL LEX1 ; ALL CHARS MOVED
|
||
|
||
21EA 200422 JSR PPRINT ; SCRIPT [LBUFF] IF ENABLED
|
||
|
||
21ED A545 LDA LINLEN ; RESTORE # CHARS
|
||
21EF 60 RTS ; INTO [A]
|
||
|
||
21F0 ; -----------------------
|
||
21F0 ; DIRECT PRINT LINE [X/A]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 102
|
||
--- MACHINE-DEPENDENT I/O: CBM64 ---
|
||
|
||
21F0 ; -----------------------
|
||
|
||
21F0 ; ENTRY: STRING ADDRESS IN [X/A] (LSB/MSB)
|
||
21F0 ; STRING LENGTH IN [Y]
|
||
|
||
21F0 8EF921 DLINE: STX STRING+LO ; DROP STRING ADDRESS
|
||
21F3 8DFA21 STA STRING+HI ; INTO DUMMY BYTES
|
||
|
||
21F6 A200 LDX #0 ; INIT CHAR-FETCH INDEX
|
||
|
||
21F8 BD DOUT: DB $BD ; 6502 "LDA nnnn,X" OPCODE
|
||
21F9 0000 STRING: DW $0000 ; DUMMY OPERAND BYTES
|
||
21FB 202821 JSR CHAR
|
||
21FE E8 INX
|
||
21FF 88 DEY ; LOOP TILL
|
||
2200 D0F6 BNE DOUT ; OUT OF CHARS
|
||
2202 60 RTS
|
||
|
||
2203 ; -----------------------
|
||
2203 ; SEND [LBUFF] TO PRINTER
|
||
2203 ; -----------------------
|
||
|
||
2203 ; ENTRY: LENTH OF LINE IN [PRLEN]
|
||
2203 ; NOW WITH IMPROVED ERROR PROTECTION! (BM 11/24/84)
|
||
|
||
2203 00 SFLAG: DB 0 ; PREVIOUS SCRIPT MODE (BM 5/14/85)
|
||
|
||
2204 A562 PPRINT: LDA SCRIPT ; SCRIPTING INTERNALLY ENABLED?
|
||
2206 F06F BEQ PEX ; NO, SCRAM IMMEDIATELY
|
||
|
||
2208 AD112A LDA ZBEGIN+ZSCRIP+1 ; CHECK SCRIPT FLAG
|
||
220B 2901 AND #%00000001 ; SCRIPTING ON?
|
||
220D F04D BEQ PP3 ; NO, CHECK FOR "UNSCRIPT"
|
||
|
||
220F A56E LDA PSTAT ; CHECK PRINTER STATUS
|
||
2211 3064 BMI PEX ; CAN'T OPEN IF NEGATIVE
|
||
2213 D02F BNE PP1 ; ALREADY OPEN, SCRIPT THE LINE
|
||
|
||
2215 ; OPEN THE PRINTER FOR OUTPUT
|
||
|
||
2215 A502 LDA FAST ; FAST-READ ENGAGED?
|
||
2217 F008 BEQ PP0 ; NO, IGNORE
|
||
2219 202629 JSR FOFF ; ELSE DISENGAGE
|
||
221C A908 LDA #8
|
||
221E 209D27 JSR DOPEN ; AND RESET THE DRIVE
|
||
|
||
2221 A200 PP0: LDX #0
|
||
2223 8602 STX FAST ; BYE, FAST DRIVE!
|
||
2225 E8 INX ; = 1
|
||
2226 866E STX PSTAT ; SET STATUS TO "PRINTER OPENED" (1)
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 103
|
||
--- MACHINE-DEPENDENT I/O: CBM64 ---
|
||
|
||
2228 A904 LDA #4 ; LOGICAL FILE #4
|
||
222A AA TAX ; DEVICE #4
|
||
222B A007 LDY #7 ; ALLOW UPPER/LOWER CASE
|
||
222D 20BAFF JSR SETLFS ; SET UP LOGICAL FILE
|
||
2230 B00C BCS PPERR ; ERROR IF CARRY SET
|
||
2232 A900 LDA #0
|
||
2234 20BDFF JSR SETNAM ; NO FILENAME REQUIRED
|
||
2237 B005 BCS PPERR ; ERROR IF CARRY SET
|
||
2239 20C0FF JSR OPEN ; OPEN THE CHANNEL
|
||
223C 9006 BCC PP1 ; OPEN OKAY IF CARRY CLEAR
|
||
|
||
223E A9FF PPERR: LDA #$FF ; ELSE SET PRINTER STATUS
|
||
2240 856E STA PSTAT ; TO "CAN'T OPEN"
|
||
2242 D022 BNE PP5 ; AND SIMULATE AN "UNSCRIPT"
|
||
|
||
2244 A204 PP1: LDX #4 ; SET PRINTER CHANNEL
|
||
2246 20C9FF JSR CHKOUT ; TO "OUTPUT"
|
||
2249 B0F3 BCS PPERR ; ERROR IF CARRY SET
|
||
|
||
224B A000 LDY #0 ; INIT INDEX
|
||
224D B90002 PP2: LDA LBUFF,Y
|
||
2250 201221 JSR LETTER
|
||
2253 B0E9 BCS PPERR ; ERROR IF CARRY SET
|
||
2255 C8 INY
|
||
2256 C66F DEC PRLEN
|
||
2258 D0F3 BNE PP2
|
||
225A F01B BEQ PEX ; RESET & RETURN
|
||
|
||
225C ; CHECK FOR "UNSCRIPT"
|
||
|
||
225C A56E PP3: LDA PSTAT ; CHECK PRINTER STATUS
|
||
225E F017 BEQ PEX ; EXIT IF PRINTER WAS OFF
|
||
2260 3015 BMI PEX ; OR UNOPENABLE
|
||
|
||
2262 A900 PCLOSE: LDA #0 ; RESET PRINTER STATUS FLAG
|
||
2264 856E STA PSTAT ; TO "CLOSED"
|
||
|
||
2266 ; ENTRY FOR PRINTER ERROR
|
||
|
||
2266 A904 PP5: LDA #4
|
||
2268 20C3FF JSR CLOSE ; CLOSE THE PRINTER CHANNEL
|
||
|
||
226B A502 LDA FAST ; FAST-READ AVAILABLE?
|
||
226D F008 BEQ PEX ; NO, EXIT
|
||
226F A908 LDA #8 ; ELSE
|
||
2271 209D27 JSR DOPEN ; RESET BOOT DRIVE
|
||
2274 4CC128 JMP FINIT ; RE-ENGAGE FAST-READ & RETURN
|
||
|
||
2277 4CCCFF PEX: JMP CLRCHN
|
||
|
||
227A ; ------------
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 104
|
||
--- MACHINE-DEPENDENT I/O: CBM64 ---
|
||
|
||
227A ; SPLIT SCREEN
|
||
227A ; ------------
|
||
|
||
227A ; SPLIT SCREEN AT LINE [ARG1]
|
||
227A ; DISABLE SPLIT IF [ARG1] = 0
|
||
227A ; IGNORE IF SPLIT ALREADY ENABLED OR [ARG1] >= 20
|
||
|
||
227A A605 ZSPLIT: LDX ARG1+LO ; IF [ARG1] = 0,
|
||
227C F02F BEQ OFFSPL ; TURN OFF SPLIT SCREEN
|
||
|
||
227E A569 LDA SPSTAT ; SPLIT ALREADY ENABLED?
|
||
2280 D02A BNE SPLEX ; IGNORE REQUEST IF SO
|
||
|
||
2282 E014 CPX #20 ; IF [ARG1] >= 20,
|
||
2284 B026 BCS SPLEX ; IGNORE
|
||
|
||
2286 E8 INX
|
||
2287 8668 STX SLINE ; ELSE SET NEW SPLIT LINE
|
||
2289 8669 STX SPSTAT ; SET "SPLIT ENABLED" FLAG
|
||
|
||
228B BD5823 SPL0: LDA LOLINE,X ; MAKE [LFROM] POINT TO
|
||
228E 856A STA LFROM+LO ; LINE [X] IN WINDOW
|
||
2290 BD7123 LDA HILINE,X
|
||
2293 856B STA LFROM+HI
|
||
|
||
2295 A027 LDY #XSIZE ; CLEAR LINE [X]
|
||
2297 A920 LDA #SPACE
|
||
2299 916A SPL1: STA (LFROM),Y
|
||
229B 88 DEY
|
||
229C 10FB BPL SPL1
|
||
|
||
229E CA DEX ; DONE ALL LINES?
|
||
229F D0EA BNE SPL0 ; LOOP TILL WINDOW CLEARED
|
||
22A1 8665 STX LINCNT ; RESET LINE COUNT TO ZERO
|
||
|
||
22A3 A917 SPCALC: LDA #YSIZE-1 ; CALCULATE # LINES TO SCROLL
|
||
22A5 38 SEC ; BEFORE "MORE" APPEARS:
|
||
22A6 E568 SBC SLINE ; LMAX = YSIZE-SLINE-1
|
||
22A8 8566 STA LMAX
|
||
22AA C666 DEC LMAX
|
||
|
||
22AC 60 SPLEX: RTS
|
||
|
||
22AD ; --------------------
|
||
22AD ; DISABLE SPLIT SCREEN
|
||
22AD ; --------------------
|
||
|
||
22AD 20D422 OFFSPL: JSR TOBOT
|
||
|
||
22B0 A201 SPLOFF: LDX #1
|
||
22B2 8668 STX SLINE ; SPLIT AT LINE 1
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 105
|
||
--- MACHINE-DEPENDENT I/O: CBM64 ---
|
||
|
||
22B4 CA DEX ; = 0
|
||
22B5 8669 STX SPSTAT ; TURN OFF STATUS FLAG
|
||
22B7 8665 STX LINCNT ; RESET LINE COUNT
|
||
22B9 A915 LDA #21
|
||
22BB 8566 STA LMAX ; SET MAXIMUM LINE SCROLL
|
||
22BD 60 RTS
|
||
|
||
22BE ; ------
|
||
22BE ; SCREEN
|
||
22BE ; ------
|
||
|
||
22BE ; GO TO TOP WINDOW IF [A] = 0
|
||
22BE ; GO TO BOTTOM IF [A] = 1
|
||
22BE ; IGNORE IF SPLIT NOT ENABLED OR [A] <> 0 OR 1
|
||
|
||
22BE A569 ZSCRN: LDA SPSTAT ; IF SPLIT NOT ENABLED,
|
||
22C0 F0EA BEQ SPLEX ; IGNORE REQUEST
|
||
|
||
22C2 A505 LDA ARG1+LO ; IF [ARG1] = 0,
|
||
22C4 0506 ORA ARG1+HI
|
||
22C6 F00C BEQ TOBOT ; GO TO BOTTOM WINDOW
|
||
22C8 C901 CMP #1 ; IF [ARG1] <> 1,
|
||
22CA D0E0 BNE SPLEX ; IGNORE THE REQUEST
|
||
|
||
22CC ; SET TO TOP WINDOW
|
||
|
||
22CC A215 TOTOP: LDX #21 ; TEMPORARILY RESET
|
||
22CE 8666 STX LMAX ; [LMAX] TO KILL "MORE"
|
||
22D0 A201 LDX #1 ; Y-POS = 1
|
||
22D2 D005 BNE DOSCRN
|
||
|
||
22D4 ; SET TO BOTTOM WINDOW
|
||
|
||
22D4 20A322 TOBOT: JSR SPCALC ; RE-CALC [LMAX]
|
||
22D7 A217 LDX #23 ; Y-POS = 23
|
||
|
||
22D9 A000 DOSCRN: LDY #0 ; X-POS = 0
|
||
22DB 8465 STY LINCNT ; RESET LINE COUNT
|
||
22DD 18 CLC
|
||
22DE 20F0FF JSR PLOT ; SET CURSOR TO X=[Y], Y=[X]
|
||
22E1 4C4A23 JMP NEWLOG ; RESET LINE TABLE & RETURN
|
||
|
||
22E4 ; ---------
|
||
22E4 ; RAZZ USER
|
||
22E4 ; ---------
|
||
|
||
22E4 A900 BOOP: LDA #$00
|
||
22E6 8D00D4 STA FRELO1 ; FREQ LSB
|
||
22E9 A905 LDA #$05
|
||
22EB 8D01D4 STA FREHI1 ; FREQ MSB
|
||
22EE A9F0 LDA #%11110000
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 106
|
||
--- MACHINE-DEPENDENT I/O: CBM64 ---
|
||
|
||
22F0 8D06D4 STA SUREL1 ; FULL SUSTAIN
|
||
22F3 A98F LDA #%10001111
|
||
22F5 8D18D4 STA SIGVOL ; FULL VOLUME
|
||
22F8 A941 LDA #%01000001
|
||
22FA 8D04D4 STA VCREG1 ; START PULSE
|
||
|
||
22FD A9FC LDA #252 ; WAIT 4 JIFFIES
|
||
22FF 85A2 STA TIME
|
||
2301 A5A2 RAZZ: LDA TIME
|
||
2303 D0FC BNE RAZZ
|
||
|
||
2305 8D04D4 STA VCREG1 ; STOP PULSE
|
||
2308 A980 LDA #%10000000
|
||
230A 8D18D4 STA SIGVOL ; VOLUME OFF
|
||
230D 60 RTS
|
||
|
||
230E ; ------------------------
|
||
230E ; CLEAR SCREEN & COLOR RAM
|
||
230E ; ------------------------
|
||
|
||
230E A904 CLS: LDA #HIGH SCREEN ; POINT [I] TO
|
||
2310 8512 STA I+HI ; SCREEN RAM
|
||
2312 A9D8 LDA #HIGH COLRAM ; POINT [J] TO
|
||
2314 8514 STA J+HI ; COLOR RAM
|
||
|
||
2316 A000 LDY #0 ; RESET PAGE INDEX
|
||
2318 8411 STY I+LO ; BOTH RAMS START
|
||
231A 8413 STY J+LO ; ON PAGE BOUNDARIES
|
||
231C 8C15D0 STY SPENA ; MAKE SURE CURSOR IS DEAD!
|
||
|
||
231F A204 LDX #4 ; CLEAR 4 PAGES
|
||
2321 A920 CLS0: LDA #SPACE ; SPACE CHAR
|
||
2323 9111 STA (I),Y ; FOR SCREEN
|
||
2325 A901 LDA #1 ; "WHITE" CODE
|
||
2327 9113 STA (J),Y ; FOR COLOR RAM
|
||
2329 C8 INY
|
||
232A D0F5 BNE CLS0
|
||
232C E612 INC I+HI ; POINT TO
|
||
232E E614 INC J+HI ; NEXT PAGE
|
||
2330 CA DEX ; 4 PAGES DONE?
|
||
2331 D0EE BNE CLS0 ; LOOP TILL EMPTY
|
||
|
||
2333 A90D LDA #13 ; RESET THE
|
||
2335 8DF807 STA SPT0 ; SPRITE RAM POINTER
|
||
|
||
2338 20CC22 JSR TOTOP ; SET CURSOR TO (0,1)
|
||
233B 20B022 JSR SPLOFF ; DISABLE SPLIT SCREEN
|
||
|
||
233E 78 SEI
|
||
233F A957 LDA #LOW DORTI ; POINT THE SYSTEM NMI VECTOR
|
||
2341 8D1803 STA NMINV+LO ; TO A SIMPLE "RTI" INSTRUCTION
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 107
|
||
--- MACHINE-DEPENDENT I/O: CBM64 ---
|
||
|
||
2344 A923 LDA #HIGH DORTI ; TO DISABLE THE STOP/RESTORE EXIT
|
||
2346 8D1903 STA NMINV+HI
|
||
2349 58 CLI
|
||
|
||
234A ; FALL THROUGH ...
|
||
|
||
234A ; ----------------------------
|
||
234A ; RESET THE LOGICAL LINE TABLE
|
||
234A ; ----------------------------
|
||
|
||
234A A218 NEWLOG: LDX #24
|
||
234C BD7123 NLG0: LDA HILINE,X ; GET MSB OF LINE ADDRESS
|
||
234F 0980 ORA #%10000000 ; SET THE HIGH BIT
|
||
2351 95D9 STA LDTB1,X ; STORE IN THE LINE TABLE
|
||
2353 CA DEX
|
||
2354 10F6 BPL NLG0
|
||
2356 60 RTS
|
||
|
||
2357 40 DORTI: RTI ; RTI INSTRUCTION FOR NMI
|
||
|
||
2358 ; -------------------
|
||
2358 ; LINE ADDRESS TABLES
|
||
2358 ; -------------------
|
||
|
||
2358 00285078 LOLINE: DB $00,$28,$50,$78,$A0,$C8,$F0,$18
|
||
2360 406890B8 DB $40,$68,$90,$B8,$E0,$08,$30,$58
|
||
2368 80A8D0F8 DB $80,$A8,$D0,$F8,$20,$48,$70,$98
|
||
2370 C0 DB $C0
|
||
|
||
2371 04040404 HILINE: DB $04,$04,$04,$04,$04,$04,$04,$05
|
||
2379 05050505 DB $05,$05,$05,$05,$05,$06,$06,$06
|
||
2381 06060606 DB $06,$06,$06,$06,$07,$07,$07,$07
|
||
2389 07 DB $07
|
||
|
||
END
|
||
INCLUD ZDOS.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 108
|
||
--- Z-DOS: CBM64 ---
|
||
|
||
|
||
238A ; ---------------------
|
||
238A ; GET Z-BLOCK FROM DISK
|
||
238A ; ---------------------
|
||
|
||
238A ; ENTRY: Z-BLOCK # IN [BLOCK]
|
||
238A ; TARGET PAGE IN [DBUFF+HI]
|
||
|
||
238A D8 GETDSK: CLD
|
||
238B A908 LDA #8
|
||
238D 857A STA DRIVE ; GAME ALWAYS PLAYS FROM DRIVE #8
|
||
|
||
238F A570 LDA DBLOCK+LO ; Z-BLOCK ID IS DIVIDEND
|
||
2391 857D STA DVD+LO
|
||
2393 A571 LDA DBLOCK+HI
|
||
2395 2901 AND #%00000001 ; MASK ALL BUT BIT 0
|
||
2397 857E STA DVD+HI ; FOR 128K VIRTUAL LIMIT
|
||
|
||
2399 A900 LDA #0
|
||
239B 8580 STA DSOR+HI ; CLEAR MSB DIVISOR
|
||
239D 8581 STA DTEMP+LO ; AND TEMP VARIABLE
|
||
239F 8582 STA DTEMP+HI
|
||
|
||
23A1 A211 LDX #17 ; USE 17 SECTORS/TRACK
|
||
23A3 867F STX DSOR+LO ; LSB OF DIVISOR
|
||
23A5 CA DEX ; (= 16) INIT DIVIDE INDEX
|
||
23A6 18 CLC
|
||
|
||
23A7 267D DVLP: ROL DVD+LO
|
||
23A9 267E ROL DVD+HI
|
||
23AB 2681 ROL DTEMP+LO
|
||
23AD 2682 ROL DTEMP+HI
|
||
|
||
23AF A581 LDA DTEMP+LO
|
||
23B1 38 SEC
|
||
23B2 E57F SBC DSOR+LO
|
||
23B4 A8 TAY
|
||
23B5 A582 LDA DTEMP+HI
|
||
23B7 E580 SBC DSOR+HI
|
||
23B9 9004 BCC DVLP1
|
||
23BB 8481 STY DTEMP+LO
|
||
23BD 8582 STA DTEMP+HI
|
||
|
||
23BF CA DVLP1: DEX
|
||
23C0 D0E5 BNE DVLP
|
||
|
||
23C2 267D ROL DVD+LO ; SHIFT LAST CARRY
|
||
23C4 267E ROL DVD+HI ; INTO QUOTIENT
|
||
|
||
23C6 A581 LDA DTEMP+LO ; REMAINDER IN [DTEMP]
|
||
23C8 8575 STA SECTOR ; IS SECTOR ID (0-16)
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 109
|
||
--- Z-DOS: CBM64 ---
|
||
|
||
|
||
23CA A57D LDA DVD+LO ; QUOTIENT IN [DVD] IS TRACK ID
|
||
23CC 18 CLC
|
||
23CD 6905 ADC #5 ; Z-CODE STARTS ON TRACK 5
|
||
|
||
23CF C911 CMP #17 ; BELOW TRACK 17?
|
||
23D1 900F BCC DVLP2 ; YES, WE'RE DONE
|
||
23D3 18 CLC ; ELSE SKIP OVER
|
||
23D4 6901 ADC #1 ; TRACK 17
|
||
23D6 C924 CMP #36 ; OUT OF RANGE?
|
||
23D8 B042 BCS TRKERR ; IF > 35, TRACK ERROR
|
||
23DA C912 CMP #18 ; IS THIS TRACK 18?
|
||
23DC D004 BNE DVLP2 ; NO, EXIT
|
||
23DE E675 INC SECTOR ; ELSE SKIP OVER
|
||
23E0 E675 INC SECTOR ; 1ST 2 SECTORS
|
||
23E2 8574 DVLP2: STA TRACK
|
||
|
||
; LDA DBLOCK+LO ; GET LSB OF BLOCK ID
|
||
; AND #%00001111 ; MASK TO GET
|
||
; STA SECTOR ; SECTOR # (0-15)
|
||
|
||
; LDA DBLOCK+HI ; GET MSB OF BLOCK ID
|
||
; AND #%00001111 ; MASK OUT GARBAGE IN BITS 7-4
|
||
; ASL A ; SHIFT THE LOW NIBBLE
|
||
; ASL A ; INTO THE HIGH NIBBLE
|
||
; ASL A
|
||
; ASL A
|
||
; STA TRACK ; AND SAVE IT HERE FOR A MOMENT
|
||
|
||
; LDA DBLOCK+LO ; GET LSB OF BLOCK ID AGAIN
|
||
; AND #%11110000 ; MASK OUT SECTOR #
|
||
; LSR A ; SHIFT THE HIGH NIBBLE
|
||
; LSR A ; INTO THE LOW NIBBLE
|
||
; LSR A
|
||
; LSR A
|
||
; ORA TRACK ; SUPERIMPOSE NEW HIGH NIBBLE
|
||
|
||
; CLC
|
||
; ADC #5 ; Z-CODE STARTS ON TRACK 5
|
||
|
||
; CMP #17 ; BELOW TRACK 17?
|
||
; BCC TKOK ; USE AS-IS IF SO
|
||
; CLC ; ELSE SKIP OVER
|
||
; ADC #1 ; TRACK 17
|
||
; CMP #36 ; ANYTHING HIGHER THAN TRACK 35
|
||
; BCS TRKERR ; IS AN ERROR
|
||
; CMP #18 ; IS THIS TRACK 18?
|
||
; BNE TKOK ; NO, WE'RE DONE
|
||
; INC SECTOR ; ELSE ADD 2 TO
|
||
; INC SECTOR ; [SECTOR] TO AVOID DIRECTORY
|
||
;TKOK: STA TRACK
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 110
|
||
--- Z-DOS: CBM64 ---
|
||
|
||
|
||
23E4 ; ENTRY FOR "RESTORE" ([TRACK], [SECTOR] & [DRIVE] PRE-ASSIGNED)
|
||
|
||
23E4 18 GETRES: CLC ; CARRY CLEAR = "READ BLOCK"
|
||
23E5 205528 JSR DISK ; GO DO IT!
|
||
23E8 B037 BCS DSKERR ; ERROR IF CARRY SET
|
||
|
||
23EA A000 LDY #0 ; MOVE CONTENTS OF [IOBUFF]
|
||
23EC B90008 GDKL: LDA IOBUFF,Y ; TO THE
|
||
23EF 9172 STA (DBUFF),Y ; TARGET PAGE IN [DBUFF]
|
||
23F1 C8 INY
|
||
23F2 D0F8 BNE GDKL
|
||
|
||
23F4 E670 INC DBLOCK+LO ; POINT TO NEXT
|
||
23F6 D002 BNE GDEX ; Z-BLOCK
|
||
23F8 E671 INC DBLOCK+HI
|
||
|
||
23FA 4C0D24 GDEX: JMP NXTSEC ; POINT TO NEXT SECTOR & PAGE
|
||
|
||
23FD ; --------------------
|
||
23FD ; PUT [DBLOCK] TO DISK
|
||
23FD ; --------------------
|
||
|
||
23FD ; ENTRY: [TRACK], [SECTOR] & [DRIVE] ASSIGNED
|
||
23FD ; PAGE TO WRITE IN [DBUFF]
|
||
|
||
23FD A000 PUTDSK: LDY #0 ; MOVE PAGE AT [DBUFF]
|
||
23FF B172 PTKL: LDA (DBUFF),Y ; INTO
|
||
2401 990008 STA IOBUFF,Y ; [IOBUFF] FOR I/O
|
||
2404 C8 INY
|
||
2405 D0F8 BNE PTKL
|
||
|
||
2407 38 SEC ; CARRY SET = "WRITE BLOCK"
|
||
2408 205528 JSR DISK
|
||
240B B00E BCS WRTERR ; CARRY SET IF ERROR
|
||
|
||
240D E675 NXTSEC: INC SECTOR ; POINT TO NEXT SECTOR
|
||
240F A575 LDA SECTOR
|
||
2411 290F AND #%00001111 ; OVEFLOWED?
|
||
2413 D002 BNE SECTOK ; CONTINUE IF NOT
|
||
2415 E674 INC TRACK ; ELSE UPDATE TRACK #
|
||
2417 8575 SECTOK: STA SECTOR ; AND SECTOR #
|
||
|
||
2419 E673 INC DBUFF+HI ; POINT TO NEXT RAM PAGE
|
||
241B 60 WRTERR: RTS
|
||
|
||
241C ; *** ERROR #12: DISK ADDRESS OUT OF RANGE ***
|
||
|
||
241C A90C TRKERR: LDA #12
|
||
241E 4CC41D JMP ZERROR
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 111
|
||
--- Z-DOS: CBM64 ---
|
||
|
||
2421 ; *** ERROR #14: DRIVE ACCESS ***
|
||
|
||
2421 A90E DSKERR: LDA #14
|
||
2423 4CC41D JMP ZERROR
|
||
|
||
2426 ; -----------------------------
|
||
2426 ; SET UP SAVE & RESTORE SCREENS
|
||
2426 ; -----------------------------
|
||
|
||
2426 20831E SAVRES: JSR ZCRLF ; CLEAR THE BUFFER
|
||
2429 200E23 JSR CLS
|
||
|
||
242C A200 LDX #0
|
||
242E 8662 STX SCRIPT ; DISABLE SCRIPTING
|
||
2430 A000 LDY #0
|
||
2432 18 CLC
|
||
2433 4CF0FF JMP PLOT ; HOME CURSOR & RETURN
|
||
|
||
2436 ; -----------------
|
||
2436 ; DISPLAY A DEFAULT
|
||
2436 ; -----------------
|
||
|
||
2436 ; ENTRY: DEFAULT (0-8) IN [A]
|
||
|
||
2436 20284465 DEFAL: DB " (Default is "
|
||
2443 2A293A DEFNUM: DB "*):"
|
||
0010 DEFALL EQU $-DEFAL
|
||
|
||
2446 18 DODEF: CLC
|
||
2447 6931 ADC #'1' ; CONVERT TO ASCII 1-9
|
||
2449 8D4324 STA DEFNUM ; INSERT IN STRING
|
||
|
||
244C A236 LDX #LOW DEFAL
|
||
244E A924 LDA #HIGH DEFAL
|
||
2450 A010 LDY #DEFALL
|
||
2452 20F021 JSR DLINE ; PRINT THE STRING
|
||
|
||
2455 ; FALL THROUGH ...
|
||
|
||
2455 ; --------------------------------
|
||
2455 ; ACTIVATE CURSOR, CLEAR KEY QUEUE
|
||
2455 ; --------------------------------
|
||
|
||
2455 A200 CURSON: LDX #0
|
||
2457 86C6 STX NDX ; CLEAR KEY QUEUE
|
||
2459 E8 INX
|
||
245A 8E15D0 STX SPENA ; ENABLE CURSOR
|
||
245D 60 RTS
|
||
|
||
245E ; -----------------------------
|
||
245E ; GET SAVE & RESTORE PARAMETERS
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 112
|
||
--- Z-DOS: CBM64 ---
|
||
|
||
245E ; -----------------------------
|
||
|
||
245E 0D POSIT: DB EOL
|
||
245F 506F7369 DB "Position 1-5"
|
||
000D POSITL EQU $-POSIT
|
||
|
||
246B 0D WDRIV: DB EOL
|
||
246C 44726976 DB "Drive 8 or 9"
|
||
000D WDRIVL EQU $-WDRIV
|
||
|
||
2478 0D MIND: DB EOL
|
||
2479 0D DB EOL
|
||
247A 506F7369 DB "Position "
|
||
2483 2A3B2044 MPOS: DB "*; Drive #"
|
||
248D 2A2E MDRI: DB "*."
|
||
248F 0D DB EOL
|
||
2490 41726520 DB "Are you sure? (Y or N):"
|
||
002F MINDL EQU $-MIND
|
||
|
||
24A7 0D INSM: DB EOL
|
||
24A8 496E7365 DB "Insert SAVE disk into Drive #"
|
||
24C5 2A2E SAVDRI: DB "*."
|
||
0020 INSML EQU $-INSM
|
||
|
||
24C7 594553 YES: DB 'YES'
|
||
24CA 0D DB EOL
|
||
0004 YESL EQU $-YES
|
||
|
||
24CB 4E4F NO: DB 'NO'
|
||
24CD 0D DB EOL
|
||
0003 NOL EQU $-NO
|
||
|
||
24CE A25E PARAMS: LDX #LOW POSIT
|
||
24D0 A924 LDA #HIGH POSIT
|
||
24D2 A00D LDY #POSITL
|
||
24D4 20F021 JSR DLINE ; "POSITION (1-5)"
|
||
|
||
24D7 ; GET GAME POSITION
|
||
|
||
24D7 A576 CHANGE: LDA GPOSIT ; SHOW THE CURRENT
|
||
24D9 204624 JSR DODEF ; DEFAULT POSITION
|
||
|
||
24DC 205920 GETPOS: JSR GETKEY ; WAIT FOR A KEY
|
||
24DF C90D CMP #EOL ; IF [RETURN],
|
||
24E1 F00D BEQ POSSET ; USE DEFAULT
|
||
24E3 38 SEC
|
||
24E4 E931 SBC #'1' ; ELSE CONVERT ASCII TO BINARY
|
||
24E6 C905 CMP #5 ; IF BELOW "6"
|
||
24E8 9008 BCC SETPOS ; MAKE IT THE NEW DEFAULT
|
||
24EA 20E422 JSR BOOP ; ELSE RAZZ
|
||
24ED 4CDC24 JMP GETPOS ; AND TRY AGAIN
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 113
|
||
--- Z-DOS: CBM64 ---
|
||
|
||
|
||
24F0 A576 POSSET: LDA GPOSIT ; USE DEFAULT
|
||
|
||
24F2 8578 SETPOS: STA TPOSIT ; USE KEYPRESS
|
||
24F4 18 CLC
|
||
24F5 6931 ADC #'1' ; CONVERT TO ASCII "1"-"5"
|
||
24F7 8D8324 STA MPOS ; STORE IN TEMP STRING
|
||
24FA 8D5E26 STA SVPOS
|
||
24FD 8DF926 STA RSPOS
|
||
2500 201221 JSR LETTER ; AND DISPLAY IT
|
||
|
||
2503 ; GET DRIVE ID
|
||
|
||
2503 A26B LDX #LOW WDRIV
|
||
2505 A924 LDA #HIGH WDRIV
|
||
2507 A00D LDY #WDRIVL
|
||
2509 20F021 JSR DLINE ; "DRIVE 8 OR 9"
|
||
|
||
250C A577 LDA GDRIVE ; SHOW DEFAULT
|
||
250E 18 CLC ; CONVERT 0 OR 1
|
||
250F 6907 ADC #7 ; TO 7 OR 8
|
||
2511 204624 JSR DODEF ; SO DEFAULT WILL BE CORRECT
|
||
|
||
2514 205920 GETDRV: JSR GETKEY ; GET A KEYPRESS
|
||
2517 C90D CMP #EOL ; IF [RETURN],
|
||
2519 F00D BEQ DRVSET ; USE DEFAULT
|
||
251B 38 SEC
|
||
251C E938 SBC #'8' ; CONVERT TO BINARY 0 OR 1
|
||
251E C902 CMP #2 ; IF WITHIN RANGE,
|
||
2520 9008 BCC SETDRV ; SET NEW DEFAULT
|
||
2522 20E422 JSR BOOP
|
||
2525 4C1425 JMP GETDRV ; ELSE TRY AGAIN
|
||
|
||
2528 A577 DRVSET: LDA GDRIVE ; USE DEFAULT
|
||
|
||
252A 8579 SETDRV: STA TDRIVE ; USE [A]
|
||
252C 18 CLC
|
||
252D 6938 ADC #'8' ; CONVERT TO ASCII 8 OR 9
|
||
252F 8DC524 STA SAVDRI ; STORE IN DRIVE STRING
|
||
2532 8D8D24 STA MDRI ; AND IN TEMP STRING
|
||
2535 201221 JSR LETTER ; AND SHOW NEW SETTING
|
||
|
||
2538 A278 LDX #LOW MIND ; SHOW TEMPORARY SETTINGS
|
||
253A A924 LDA #HIGH MIND
|
||
253C A02F LDY #MINDL
|
||
253E 20F021 JSR DLINE
|
||
|
||
2541 205524 JSR CURSON
|
||
|
||
2544 205920 GETYES: JSR GETKEY
|
||
2547 C959 CMP #'Y' ; IF REPLY IS "Y"
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 114
|
||
--- Z-DOS: CBM64 ---
|
||
|
||
2549 F01E BEQ ALLSET ; ACCEPT RESPONSES
|
||
254B C979 CMP #'y'
|
||
254D F01A BEQ ALLSET
|
||
|
||
254F C94E CMP #'N' ; IF REPLY IS N,
|
||
2551 F00A BEQ RETRY ; DO A RETRY
|
||
2553 C96E CMP #'n'
|
||
2555 F006 BEQ RETRY
|
||
|
||
2557 20E422 JSR BOOP ; INSIST ON Y/RETURN
|
||
255A 4C4425 JMP GETYES ; OR N
|
||
|
||
255D A2CB RETRY: LDX #LOW NO ; ELSE PRINT "NO"
|
||
255F A924 LDA #HIGH NO
|
||
2561 A003 LDY #NOL
|
||
2563 20F021 JSR DLINE
|
||
2566 4CCE24 JMP PARAMS ; AND TRY AGAIN
|
||
|
||
2569 A900 ALLSET: LDA #0
|
||
256B 8D15D0 STA SPENA ; CURSOR OFF
|
||
|
||
256E A2C7 LDX #LOW YES ; PRINT "YES"
|
||
2570 A924 LDA #HIGH YES
|
||
2572 A004 LDY #YESL
|
||
2574 20F021 JSR DLINE
|
||
|
||
2577 A579 LDA TDRIVE ; MAKE THE TEMPORARY DRIVE
|
||
2579 8577 STA GDRIVE ; THE DEFAULT DRIVE
|
||
257B A578 LDA TPOSIT ; AND THE TEMP POSITION
|
||
257D 8576 STA GPOSIT ; THE DEFAULT POSITION
|
||
|
||
257F ; CALC TRACK & SECTOR OF GAME POSITION
|
||
|
||
257F 0A ASL A ; * 2
|
||
2580 8574 STA TRACK ; SAVE HERE FOR A MOMENT
|
||
2582 0A ASL A ; * 4
|
||
2583 18 CLC
|
||
2584 6574 ADC TRACK ; * 6 (6 TRACKS PER POSITION)
|
||
2586 8574 STA TRACK
|
||
2588 E674 INC TRACK ; 1ST TRACK IS 1!
|
||
258A A900 LDA #0
|
||
258C 8575 STA SECTOR ; ALWAYS START ON SECTOR #0
|
||
|
||
258E A502 LDA FAST ; FAST-READ ENABLED?
|
||
2590 F003 BEQ PRY1 ; NO, CONTINUE
|
||
2592 202629 JSR FOFF ; ELSE DISENGAGE FAST-READ
|
||
|
||
2595 A577 PRY1: LDA GDRIVE ; TRY TO OPEN SPECIFIED DRIVE
|
||
2597 18 CLC
|
||
2598 6908 ADC #8
|
||
259A 209D27 JSR DOPEN ; THE DEFAULT DRIVE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 115
|
||
--- Z-DOS: CBM64 ---
|
||
|
||
259D B00D BCS PARERR ; CARRY SET IF ERROR
|
||
|
||
259F A2A7 SREADY: LDX #LOW INSM
|
||
25A1 A924 LDA #HIGH INSM
|
||
25A3 A020 LDY #INSML
|
||
25A5 20F021 JSR DLINE ; "INSERT SAVE DISK IN DRIVE X."
|
||
25A8 20AD25 JSR RETURN ; "PRESS [RETURN] TO CONTINUE."
|
||
25AB 18 CLC ; FOR SUCCESS
|
||
25AC 60 PARERR: RTS
|
||
|
||
25AD ; ---------------------
|
||
25AD ; "PRESS RETURN" PROMPT
|
||
25AD ; ---------------------
|
||
|
||
25AD A2CC RETURN: LDX #LOW RTN
|
||
25AF A925 LDA #HIGH RTN
|
||
25B1 A01D LDY #RTNL
|
||
25B3 20F021 JSR DLINE ; SHOW PROMPT
|
||
|
||
25B6 ; ENTRY FOR QUIT/RESTART
|
||
|
||
25B6 205524 GETRET: JSR CURSON ; ENABLE CURSOR
|
||
|
||
25B9 205920 GTRT: JSR GETKEY ; WAIT FOR [RETURN]
|
||
25BC C90D CMP #EOL
|
||
25BE F006 BEQ RETEX
|
||
25C0 20E422 JSR BOOP ; ACCEPT NO
|
||
25C3 4CB925 JMP GTRT ; SUBSTITUTES!
|
||
|
||
25C6 A900 RETEX: LDA #0
|
||
25C8 8D15D0 STA SPENA ; KILL CURSOR
|
||
25CB 60 RTS
|
||
|
||
25CC 0D RTN: DB EOL
|
||
25CD 50726573 DB "Press [RETURN] to continue."
|
||
25E8 0D DB EOL
|
||
001D RTNL EQU $-RTN
|
||
|
||
25E9 ; --------------------
|
||
25E9 ; PROMPT FOR GAME DISK
|
||
25E9 ; --------------------
|
||
|
||
25E9 0D GAME: DB EOL
|
||
25EA 496E7365 DB "Insert STORY disk into drive #8."
|
||
0021 GAMEL EQU $-GAME
|
||
|
||
260A A908 TOBOOT: LDA #8
|
||
260C 209D27 JSR DOPEN ; CLOSE OLD, OPEN BOOT DRIVE
|
||
|
||
260F A2E9 LDX #LOW GAME
|
||
2611 A925 LDA #HIGH GAME
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 116
|
||
--- Z-DOS: CBM64 ---
|
||
|
||
2613 A021 LDY #GAMEL
|
||
2615 20F021 JSR DLINE ; "INSERT STORY DISK IN DRIVE #8."
|
||
|
||
2618 20AD25 JSR RETURN ; "PRESS [RETURN] TO CONTINUE:"
|
||
|
||
261B A502 LDA FAST ; FAST-READ ENABLED?
|
||
261D F003 BEQ TBT0 ; NO, SCRAM
|
||
261F 20C128 JSR FINIT ; ELSE RE-INIT FAST CODE
|
||
|
||
2622 A9FF TBT0: LDA #$FF ; RE-ENABLE
|
||
2624 8562 STA SCRIPT ; SCRIPTING
|
||
2626 4C0E23 JMP CLS ; CLEAR SCREEN & RETURN
|
||
|
||
2629 ; -------------------------
|
||
2629 ; SET UP PHONEY STATUS LINE
|
||
2629 ; -------------------------
|
||
|
||
2629 ; ENTRY: TEXT SET UP FOR "DLINE"
|
||
|
||
2629 20F021 SROOM: JSR DLINE
|
||
|
||
262C A227 LDX #39 ; INVERT & BLACKEN TOP LINE
|
||
262E BD0004 SRLP: LDA SCREEN,X
|
||
2631 0980 ORA #%10000000
|
||
2633 9D0004 STA SCREEN,X
|
||
2636 A900 LDA #0
|
||
2638 9D00D8 STA COLRAM,X
|
||
263B CA DEX
|
||
263C 10F0 BPL SRLP
|
||
263E 60 RTS
|
||
|
||
263F ; ---------
|
||
263F ; SAVE GAME
|
||
263F ; ---------
|
||
|
||
263F 53617665 SAV: DB "Save Position"
|
||
264C 0D DB EOL
|
||
000E SAVL EQU $-SAV
|
||
|
||
264D 0D SVING: DB EOL
|
||
264E 53617669 DB "Saving position "
|
||
265E 2A202E2E SVPOS: DB "* ..."
|
||
2663 0D DB EOL
|
||
0017 SVINGL EQU $-SVING
|
||
|
||
2664 202624 ZSAVE: JSR SAVRES ; SET UP SCREEN
|
||
|
||
2667 A23F LDX #LOW SAV
|
||
2669 A926 LDA #HIGH SAV
|
||
266B A00E LDY #SAVL
|
||
266D 202926 JSR SROOM ; "SAVE POSITION"
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 117
|
||
--- Z-DOS: CBM64 ---
|
||
|
||
|
||
2670 20CE24 JSR PARAMS ; GET PARAMETERS
|
||
2673 9006 BCC DOSAVE ; ERROR IF CARRY SET
|
||
|
||
2675 200A26 BADSAV: JSR TOBOOT ; GET BOOT DISK
|
||
2678 4C2A11 JMP PREDF ; PREDICATE FAILS
|
||
|
||
267B A24D DOSAVE: LDX #LOW SVING
|
||
267D A926 LDA #HIGH SVING
|
||
267F A017 LDY #SVINGL
|
||
2681 20F021 JSR DLINE ; "SAVING POSITION X ..."
|
||
|
||
2684 ; SAVE GAME PARAMETERS IN [BUFSAV]
|
||
|
||
2684 AD022A LDA ZBEGIN+ZID ; MOVE GAME ID
|
||
2687 8D200D STA BUFSAV+0 ; INTO 1ST 2 BYTES
|
||
268A AD032A LDA ZBEGIN+ZID+1 ; OF THE AUX LINE BUFFER
|
||
268D 8D210D STA BUFSAV+1
|
||
|
||
2690 A517 LDA ZSP ; MOVE [ZSP]
|
||
2692 8D220D STA BUFSAV+2 ; TO 3RD BYTE
|
||
2695 A518 LDA OLDZSP ; MOVE [OLDZSP]
|
||
2697 8D230D STA BUFSAV+3 ; TO 4TH
|
||
|
||
269A A202 LDX #2 ; MOVE CONTENTS OF [ZPC]
|
||
269C B519 ZPCSAV: LDA ZPC,X ; TO BYTES 5-7
|
||
269E 9D240D STA BUFSAV+4,X ; OF [BUFSAV]
|
||
26A1 CA DEX
|
||
26A2 10F8 BPL ZPCSAV
|
||
|
||
26A4 ; WRITE [LOCALS]/[BUFSAV] PAGE TO DISK
|
||
|
||
26A4 A90D LDA #HIGH LOCALS
|
||
26A6 8573 STA DBUFF+HI ; POINT TO THE PAGE
|
||
26A8 20FD23 JSR PUTDSK ; AND WRITE IT OUT
|
||
26AB B0C8 BCS BADSAV ; CATCH WRITE ERROR HERE
|
||
|
||
26AD ; WRITE CONTENTS OF Z-STACK TO DISK
|
||
|
||
26AD A909 LDA #HIGH ZSTAKL ; POINT TO 1ST PAGE
|
||
26AF 8573 STA DBUFF+HI
|
||
26B1 20FD23 JSR PUTDSK ; WRITE 1ST AND
|
||
26B4 B0BF BCS BADSAV
|
||
26B6 20FD23 JSR PUTDSK ; 2ND PAGE OF Z-STACK
|
||
26B9 B0BA BCS BADSAV
|
||
|
||
26BB ; WRITE ENTIRE GAME PRELOAD TO DISK
|
||
|
||
26BB A526 LDA ZCODE ; POINT TO 1ST PAGE
|
||
26BD 8573 STA DBUFF+HI ; OF PRELOAD
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 118
|
||
--- Z-DOS: CBM64 ---
|
||
|
||
26BF AE0E2A LDX ZBEGIN+ZPURBT ; GET # IMPURE PAGES
|
||
26C2 E8 INX ; USE FOR INDEXING
|
||
26C3 8611 STX I+LO
|
||
|
||
26C5 20FD23 LSAVE: JSR PUTDSK
|
||
26C8 B0AB BCS BADSAV
|
||
26CA C611 DEC I+LO
|
||
26CC D0F7 BNE LSAVE
|
||
|
||
26CE 200A26 JSR TOBOOT ; PROMPT FOR GAME DISK
|
||
26D1 4C3611 JMP PREDS ; ELSE PREDICATE SUCCEEDS
|
||
|
||
26D4 ; ------------
|
||
26D4 ; RESTORE GAME
|
||
26D4 ; ------------
|
||
|
||
26D4 52657374 RES: DB "Restore Position"
|
||
26E4 0D DB EOL
|
||
0011 RESL EQU $-RES
|
||
|
||
26E5 0D RSING: DB EOL
|
||
26E6 52657374 DB "Restoring position "
|
||
26F9 2A202E2E RSPOS: DB "* ..."
|
||
26FE 0D DB EOL
|
||
001A RSINGL EQU $-RSING
|
||
|
||
26FF 202624 ZREST: JSR SAVRES
|
||
|
||
2702 A2D4 LDX #LOW RES
|
||
2704 A926 LDA #HIGH RES
|
||
2706 A011 LDY #RESL
|
||
2708 202926 JSR SROOM ; "RESTORE POSITION"
|
||
|
||
270B 20CE24 JSR PARAMS ; GET PARAMETERS
|
||
270E B036 BCS BADRES ; ERROR IF CARRY SET
|
||
|
||
2710 A2E5 LDX #LOW RSING
|
||
2712 A926 LDA #HIGH RSING
|
||
2714 A01A LDY #RSINGL
|
||
2716 20F021 JSR DLINE ; "RESTORING POSITION X ..."
|
||
|
||
2719 ; SAVE LOCALS IN CASE OF ERROR
|
||
|
||
2719 A21F LDX #31
|
||
271B BD000D LOCSAV: LDA LOCALS,X ; COPY ALL LOCALS
|
||
271E 9D0001 STA $0100,X ; TO BOTTOM OF MACHINE STACK
|
||
2721 CA DEX
|
||
2722 10F7 BPL LOCSAV
|
||
|
||
2724 A90D LDA #HIGH LOCALS
|
||
2726 8573 STA DBUFF+HI
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 119
|
||
--- Z-DOS: CBM64 ---
|
||
|
||
2728 20E423 JSR GETRES ; RETRIEVE 1ST BLOCK OF PRELOAD
|
||
|
||
272B AD200D LDA BUFSAV+0 ; DOES 1ST BYTE OF SAVED GAME ID
|
||
272E CD022A CMP ZBEGIN+ZID ; MATCH THE CURRENT ID?
|
||
2731 D008 BNE WRONG ; WRONG DISK IF NOT
|
||
|
||
2733 AD210D LDA BUFSAV+1 ; WHAT ABOUT THE 2ND BYTE?
|
||
2736 CD032A CMP ZBEGIN+ZID+1
|
||
2739 F011 BEQ RIGHT ; CONTINUE IF BOTH BYTES MATCH
|
||
|
||
273B ; HANDLE INCORRECT SAVE DISK
|
||
|
||
273B A21F WRONG: LDX #31 ; RESTORE ALL SAVED LOCALS
|
||
273D BD0001 WR0: LDA $0100,X
|
||
2740 9D000D STA LOCALS,X
|
||
2743 CA DEX
|
||
2744 10F7 BPL WR0
|
||
|
||
2746 200A26 BADRES: JSR TOBOOT ; PROMPT FOR GAME DISK
|
||
2749 4C2A11 JMP PREDF ; PREDICATE FAILS
|
||
|
||
274C ; CONTINUE RESTORE
|
||
|
||
274C AD102A RIGHT: LDA ZBEGIN+ZSCRIP ; SAVE BOTH FLAG BYTES
|
||
274F 8511 STA I+LO
|
||
2751 AD112A LDA ZBEGIN+ZSCRIP+1
|
||
2754 8512 STA I+HI
|
||
|
||
2756 A909 LDA #HIGH ZSTAKL ; RETRIEVE OLD CONTENTS OF
|
||
2758 8573 STA DBUFF+HI ; Z-STACK
|
||
275A 20E423 JSR GETRES ; GET 1ST BLOCK OF Z-STACK
|
||
275D 20E423 JSR GETRES ; AND 2ND BLOCK
|
||
|
||
2760 A526 LDA ZCODE
|
||
2762 8573 STA DBUFF+HI
|
||
2764 20E423 JSR GETRES ; GET 1ST BLOCK OF PRELOAD
|
||
|
||
2767 A511 LDA I+LO ; RESTORE THE STATE
|
||
2769 8D102A STA ZBEGIN+ZSCRIP ; OF THE FLAG WORD
|
||
276C A512 LDA I+HI
|
||
276E 8D112A STA ZBEGIN+ZSCRIP+1
|
||
|
||
2771 AD0E2A LDA ZBEGIN+ZPURBT ; GET # PAGES TO LOAD
|
||
2774 8511 STA I+LO
|
||
|
||
2776 20E423 LREST: JSR GETRES ; FETCH THE REMAINDER
|
||
2779 C611 DEC I+LO ; OF THE PRELOAD
|
||
277B D0F9 BNE LREST
|
||
|
||
277D ; RESTORE THE STATE OF THE SAVED GAME
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 120
|
||
--- Z-DOS: CBM64 ---
|
||
|
||
277D AD220D LDA BUFSAV+2 ; RESTORE THE [ZSP]
|
||
2780 8517 STA ZSP
|
||
2782 AD230D LDA BUFSAV+3 ; AND THE [OLDZSP]
|
||
2785 8518 STA OLDZSP
|
||
|
||
2787 A202 LDX #2 ; RESTORE THE [ZPC]
|
||
2789 BD240D RESZPC: LDA BUFSAV+4,X
|
||
278C 9519 STA ZPC,X
|
||
278E CA DEX
|
||
278F 10F8 BPL RESZPC
|
||
|
||
2791 A900 LDA #FALSE
|
||
2793 851C STA ZPCFLG ; INVALIDATE [ZPC]
|
||
|
||
2795 200A26 JSR TOBOOT ; PROMPT FOR GAME DISK
|
||
2798 4C3611 JMP PREDS ; PREDICATE SUCCEEDS
|
||
|
||
END
|
||
INCLUD DISK.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 121
|
||
--- DISK ACCESS: CBM64 ---
|
||
|
||
|
||
279B ; --------------
|
||
279B ; OPEN DRIVE [A]
|
||
279B ; --------------
|
||
|
||
279B ; ENTRY: DISK ID (8 OR 9 BINARY) IN [A]
|
||
|
||
279B 4930 I0: DB "I0"
|
||
0002 I0L EQU $-I0
|
||
|
||
279D 857A DOPEN: STA DRIVE ; SAVE DRIVE ID HERE
|
||
279F 20D327 JSR DCLOSE ; CLOSE COMMAND & DATA CHANNELS
|
||
|
||
27A2 A90F LDA #15 ; LOGICAL FILE #
|
||
27A4 A8 TAY ; SECONDARY ADDRESS
|
||
27A5 A67A LDX DRIVE ; DEVICE # (8 OR 9)
|
||
27A7 20BAFF JSR SETLFS ; SET UP LOGICAL FILE
|
||
|
||
27AA A29B LDX #LOW I0 ; POINT TO FILENAME
|
||
27AC A027 LDY #HIGH I0 ; "I0:"
|
||
27AE A902 LDA #I0L ; LENGTH OF FILENAME
|
||
27B0 20BDFF JSR SETNAM
|
||
|
||
27B3 4CC0FF JMP OPEN ; OPEN THE DISK (CARRY CLEAR IF OK)
|
||
|
||
27B6 ; --------------------------
|
||
27B6 ; OPEN DIRECT ACCESS CHANNEL
|
||
27B6 ; --------------------------
|
||
|
||
27B6 23 POUND: DB "#"
|
||
0001 POUNDL EQU $-POUND
|
||
|
||
27B7 A900 AOPEN: LDA #0
|
||
27B9 8D15D0 STA SPENA ; SHUT OFF CURSOR DMA
|
||
|
||
27BC 20D827 JSR ACLOSE ; CLOSE FIRST
|
||
|
||
27BF A902 LDA #2 ; D/A CHANNEL ID
|
||
27C1 A8 TAY ; SECONDARY ID
|
||
27C2 A67A LDX DRIVE
|
||
27C4 20BAFF JSR SETLFS
|
||
|
||
27C7 A2B6 LDX #LOW POUND ; POINT TO FILENAME
|
||
27C9 A027 LDY #HIGH POUND ; "#"
|
||
27CB A901 LDA #POUNDL
|
||
27CD 20BDFF JSR SETNAM
|
||
|
||
27D0 4CC0FF JMP OPEN ; OPEN CHANNEL (CARRY CLEAR IF OK)
|
||
|
||
27D3 ; -------------------
|
||
27D3 ; CLOSE CURRENT DRIVE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 122
|
||
--- DISK ACCESS: CBM64 ---
|
||
|
||
27D3 ; -------------------
|
||
|
||
27D3 A90F DCLOSE: LDA #15 ; CLOSE COMMAND CHANNEL
|
||
27D5 20C3FF JSR CLOSE
|
||
|
||
27D8 ; FALL THROUGH ...
|
||
|
||
27D8 ; ---------------------
|
||
27D8 ; CLOSE THE D/A CHANNEL
|
||
27D8 ; ---------------------
|
||
|
||
27D8 A902 ACLOSE: LDA #2 ; AND THE
|
||
27DA 4CC3FF JMP CLOSE ; DATA CHANNEL
|
||
|
||
27DD ; ----------------
|
||
27DD ; DIVIDE [A] BY 10
|
||
27DD ; ----------------
|
||
|
||
27DD ; EXIT: QUOTIENT IN [X], REMAINDER IN [A]
|
||
|
||
27DD A200 DIV10: LDX #0 ; START WITH ZERO QUOTIENT
|
||
|
||
27DF C90A D10L: CMP #10 ; IF DIVISOR < 10,
|
||
27E1 9005 BCC D10EX ; WE'RE DONE
|
||
27E3 E90A SBC #10 ; ELSE SUBTRACT ANOTHER 10
|
||
27E5 E8 INX ; UPDATE QUOTIENT
|
||
27E6 D0F7 BNE D10L ; BRANCH ALWAYS
|
||
|
||
27E8 60 D10EX: RTS
|
||
|
||
27E9 ; ---------------
|
||
27E9 ; SEND Ux COMMAND
|
||
27E9 ; ---------------
|
||
|
||
27E9 ; ENTRY: ASCII "1" OR "2" IN [A]
|
||
|
||
27E9 55 COMLIN: DB "U"
|
||
27EA 2A DCOMM: DB "*"
|
||
27EB 3A322C30 DB ":2,0,"
|
||
27F0 2A2A2A2C DTRAK: DB "***,"
|
||
27F4 2A2A2A DSECT: DB "***"
|
||
27F7 0D DB EOL
|
||
000F CMLL EQU $-COMLIN
|
||
|
||
27F8 8DEA27 SENDU: STA DCOMM ; INSERT COMMAND ("1" OR "2") IN STRING
|
||
|
||
27FB ; CONVERT [TRACK] AND [SECTOR] TO ASCII IN [COMLIN]
|
||
|
||
27FB A574 LDA TRACK
|
||
27FD A002 LDY #2
|
||
27FF 20DD27 TCON: JSR DIV10 ; DIVIDE BY 10
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 123
|
||
--- DISK ACCESS: CBM64 ---
|
||
|
||
2802 0930 ORA #'0' ; CONVERT TO ASCII
|
||
2804 99F027 STA DTRAK,Y ; STORE INTO STRING
|
||
2807 8A TXA ; GET QUOTIENT INTO [A]
|
||
2808 88 DEY ; ZERO-FILL USUSED BYTES
|
||
2809 10F4 BPL TCON
|
||
|
||
280B A575 LDA SECTOR ; SAME FOR SECTOR ID
|
||
280D A002 LDY #2
|
||
280F 20DD27 SCON: JSR DIV10
|
||
2812 0930 ORA #'0'
|
||
2814 99F427 STA DSECT,Y
|
||
2817 8A TXA
|
||
2818 88 DEY
|
||
2819 10F4 BPL SCON
|
||
|
||
281B ; SEND COMMAND
|
||
|
||
281B 20CCFF JSR CLRCHN
|
||
281E A20F LDX #15 ; OUTPUT TO THE
|
||
2820 20C9FF JSR CHKOUT ; COMMAND CHANNEL
|
||
2823 B00E BCS UEX ; EXIT W/CARRY SET IF ERROR
|
||
|
||
2825 A000 LDY #0
|
||
2827 B9E927 SCM0: LDA COMLIN,Y ; SEND THE COMMAND LINE
|
||
282A 20D2FF JSR CHROUT ; TO THE DRIVE CHANNEL
|
||
282D C8 INY ; A BYTE AT A TIME
|
||
282E C00F CPY #CMLL
|
||
2830 90F5 BCC SCM0
|
||
2832 18 CLC ; SUCCESS!
|
||
2833 60 UEX: RTS
|
||
|
||
2834 ; ----------------------
|
||
2834 ; SET THE BUFFER POINTER
|
||
2834 ; ----------------------
|
||
|
||
2834 422D503A BPLINE: DB "B-P:2,0"
|
||
283B 0D DB EOL
|
||
0008 BPLL EQU $-BPLINE
|
||
|
||
283C 20CCFF SETBP: JSR CLRCHN
|
||
283F A20F LDX #15 ; OUTPUT TO
|
||
2841 20C9FF JSR CHKOUT ; COMMAND CHANNEL
|
||
2844 B00E BCS BEX ; CARRY SET IF ERROR
|
||
|
||
2846 A000 LDY #0
|
||
2848 B93428 SBPL: LDA BPLINE,Y
|
||
284B 20D2FF JSR CHROUT
|
||
284E C8 INY
|
||
284F C008 CPY #BPLL
|
||
2851 90F5 BCC SBPL
|
||
2853 18 CLC
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 124
|
||
--- DISK ACCESS: CBM64 ---
|
||
|
||
2854 60 BEX: RTS
|
||
|
||
2855 ; ------------------------------
|
||
2855 ; READ/WRITE A BLOCK TO [IOBUFF]
|
||
2855 ; ------------------------------
|
||
|
||
2855 ; ENTRY: [TRACK] = TRACK # (1-35)
|
||
2855 ; [SECTOR] = SECTOR # (0-15)
|
||
2855 ; [DRIVE] = DRIVE ID (8 OR 9)
|
||
2855 ; CARRY CLEAR TO READ, CARRY SET TO WRITE
|
||
|
||
2855 B033 DISK: BCS DWRITE ; WRITE IF CARRY SET
|
||
|
||
2857 ; READ A DISK BLOCK
|
||
|
||
2857 A5FD LDA FASTEN ; FAST-READ AVAILABLE?
|
||
2859 F007 BEQ SLOW ; USE SLOW CODE IF NOT
|
||
285B A502 LDA FAST ; FAST-READ ENGAGED?
|
||
285D F003 BEQ SLOW ; NO, USE SLOW
|
||
|
||
285F 4C0A29 JMP DOFAST ; ELSE USE FAST-READ ROUTINES
|
||
|
||
2862 20B727 SLOW: JSR AOPEN ; OPEN THE ACCESS CHANNEL
|
||
2865 B055 BCS BADISK
|
||
|
||
2867 A931 LDA #'1' ; SEND A "U1" COMMAND
|
||
2869 20F827 JSR SENDU
|
||
286C B04E BCS BADISK ; CARRY SET IF ERROR
|
||
|
||
286E 203C28 JSR SETBP ; SET THE BUFFER POINTER
|
||
2871 B049 BCS BADISK ; CARRY SET IF ERROR
|
||
|
||
2873 20CCFF JSR CLRCHN
|
||
2876 A202 LDX #2 ; INPUT FROM
|
||
2878 20C6FF JSR CHKIN ; DATA CHANNEL
|
||
287B B03F BCS BADISK
|
||
|
||
287D A000 LDY #0
|
||
287F 20CFFF READ1: JSR CHRIN ; GET A BYTE
|
||
2882 990008 STA IOBUFF,Y ; MOVE TO I/O BUFFER
|
||
2885 C8 INY
|
||
2886 D0F7 BNE READ1 ; DO 256 BYTES
|
||
|
||
2888 F026 BEQ SHUTD ; THEN EXIT
|
||
|
||
288A ; WRITE A BLOCK
|
||
|
||
288A 20B727 DWRITE: JSR AOPEN ; OPEN THE ACCESS CHANNEL
|
||
288D B02D BCS BADISK
|
||
|
||
288F 203C28 JSR SETBP ; SET THE BUFFER POINTER
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 125
|
||
--- DISK ACCESS: CBM64 ---
|
||
|
||
2892 B028 BCS BADISK ; CARRY SET IF ERROR
|
||
|
||
2894 20CCFF JSR CLRCHN
|
||
2897 A202 LDX #2 ; OUTPUT TO
|
||
2899 20C9FF JSR CHKOUT ; DATA CHANNEL
|
||
289C B01E BCS BADISK ; CARRY SET IF ERROR
|
||
|
||
289E A000 LDY #0
|
||
28A0 B90008 WRITE1: LDA IOBUFF,Y ; SEND CONTENTS OF [IOBUFF]
|
||
28A3 20D2FF JSR CHROUT ; TO THE DRIVE
|
||
28A6 C8 INY
|
||
28A7 D0F7 BNE WRITE1 ; WRITE 256 BYTES
|
||
|
||
28A9 A932 LDA #'2' ; ISSUE A "U2" COMMAND
|
||
28AB 20F827 JSR SENDU
|
||
28AE B00C BCS BADISK ; CARRY SET IF ERROR
|
||
|
||
28B0 20B7FF SHUTD: JSR READST
|
||
28B3 2983 AND #%10000011
|
||
28B5 D005 BNE BADISK
|
||
|
||
28B7 20CCFF JSR CLRCHN
|
||
28BA 18 CLC ; CARRY CLEAR FOR SUCCESS
|
||
28BB 60 RTS
|
||
|
||
28BC 20CCFF BADISK: JSR CLRCHN
|
||
28BF 38 SEC
|
||
28C0 60 RTS ; OR SET IF ERROR
|
||
|
||
END
|
||
INCLUD FAST.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 126
|
||
--- FAST DISK READ: CBM64 ---
|
||
|
||
|
||
28C1 ; --------------
|
||
28C1 ; INIT FAST READ
|
||
28C1 ; --------------
|
||
|
||
28C1 A902 FINIT: LDA #2
|
||
28C3 A8 TAY
|
||
28C4 A208 LDX #8
|
||
28C6 20BAFF JSR SETLFS
|
||
28C9 A902 LDA #2
|
||
28CB A2FE LDX #LOW DNAME
|
||
28CD A028 LDY #HIGH DNAME
|
||
28CF 20BDFF JSR SETNAM
|
||
28D2 20C0FF JSR OPEN
|
||
|
||
28D5 A20F LDX #15
|
||
28D7 20C9FF JSR CHKOUT
|
||
|
||
28DA A009 LDY #9 ; SEND "U1:2,0,1,1"
|
||
28DC B90029 FNT0: LDA DCMND,Y
|
||
28DF 20D2FF JSR CHROUT
|
||
28E2 88 DEY
|
||
28E3 10F7 BPL FNT0
|
||
|
||
28E5 20CCFF JSR CLRCHN ; RESET CHANNEL
|
||
28E8 A20F LDX #15
|
||
28EA 20C9FF JSR CHKOUT
|
||
|
||
28ED A955 LDA #'U' ; SEND "U3" COMMAND
|
||
28EF 20D2FF JSR CHROUT
|
||
28F2 A933 LDA #'3'
|
||
28F4 20D2FF JSR CHROUT
|
||
|
||
28F7 A9FF LDA #$FF
|
||
28F9 85FD STA FASTEN ; SET "FAST-READ ENABLED" FLAG
|
||
28FB 4CCCFF JMP CLRCHN ; CLEAR & RETURN
|
||
|
||
28FE 2332 DNAME: DB "#2"
|
||
|
||
2900 312C312C DCMND: DB "1,1,0,2:1U"
|
||
|
||
290A ; ----------------------
|
||
290A ; FAST-READ A DISK BLOCK
|
||
290A ; ----------------------
|
||
|
||
290A ; ENTRY: TARGET TRACK IN [TRACK]
|
||
290A ; TARGET SECTOR IN [SECTOR]
|
||
290A ; EXIT: DATA IN [IOBUFF]
|
||
|
||
290A A574 DOFAST: LDA TRACK ; SPECIFY
|
||
290C 208829 JSR SNDBYT ; TRACK &
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 127
|
||
--- FAST DISK READ: CBM64 ---
|
||
|
||
290F A575 LDA SECTOR ; SECTOR TO READ
|
||
2911 208829 JSR SNDBYT
|
||
|
||
2914 A900 LDA #0
|
||
2916 85FC STA FINDEX ; INIT LOOP INDEX
|
||
|
||
2918 204729 DFST1: JSR ZOOM ; GET A BYTE FROM DISK
|
||
291B A4FC LDY FINDEX
|
||
291D 990008 STA IOBUFF,Y ; MOVE TO [IOBUFF]
|
||
2920 E6FC INC FINDEX
|
||
2922 D0F4 BNE DFST1 ; FILL THE BUFFER
|
||
2924 18 CLC
|
||
2925 60 RTS
|
||
|
||
2926 ; -------------------
|
||
2926 ; DISENGAGE FAST-READ
|
||
2926 ; -------------------
|
||
|
||
2926 A900 FOFF: LDA #0
|
||
2928 85FD STA FASTEN ; CLEAR "FAST-READ ENABLED" FLAG
|
||
292A 208829 JSR SNDBYT ; SEND "TRACK 0"
|
||
292D A908 LDA #8
|
||
292F 209D27 JSR DOPEN ; CLOSE & OPEN BOOT DRIVE
|
||
2932 20B727 JSR AOPEN ; OPEN DATA CHANNEL
|
||
|
||
2935 A20F LDX #15
|
||
2937 20C9FF JSR CHKOUT ; OUTPUT TO COMMAND CHANNEL
|
||
|
||
293A A955 LDA #'U' ; SEND "UI" TO RE-INIT DRIVE
|
||
293C 20D2FF JSR CHROUT
|
||
293F A949 LDA #'I'
|
||
2941 20D2FF JSR CHROUT
|
||
|
||
2944 4CCCFF JMP CLRCHN ; CLEAR & RETURN
|
||
|
||
2947 ; -----------------------
|
||
2947 ; GET FAST BYTE FROM DISK
|
||
2947 ; -----------------------
|
||
|
||
2947 A980 ZOOM: LDA #$80
|
||
2949 85FB STA FDATA
|
||
|
||
294B AD00DD GETBIT: LDA CI2PRA
|
||
294E 0910 ORA #$10
|
||
2950 8D00DD STA CI2PRA
|
||
|
||
2953 AD00DD GETBO0: LDA CI2PRA
|
||
2956 A8 TAY
|
||
2957 2980 AND #$80
|
||
2959 D0F8 BNE GETBO0
|
||
295B 98 TYA
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 128
|
||
--- FAST DISK READ: CBM64 ---
|
||
|
||
295C 29EF AND #$EF
|
||
295E 8D00DD STA CI2PRA
|
||
|
||
2961 AD00DD GETBO1: LDA CI2PRA
|
||
2964 A8 TAY
|
||
2965 2980 AND #$80
|
||
2967 F0F8 BEQ GETBO1
|
||
|
||
2969 98 GETBO2: TYA
|
||
296A 0910 ORA #$10
|
||
296C 8D00DD STA CI2PRA
|
||
|
||
296F A207 LDX #7
|
||
2971 CA GETBO3: DEX
|
||
2972 D0FD BNE GETBO3
|
||
2974 AD00DD LDA CI2PRA
|
||
2977 A8 TAY
|
||
2978 29EF AND #$EF
|
||
297A 8D00DD STA CI2PRA
|
||
297D 98 TYA
|
||
297E 0A ASL A
|
||
297F 66FB ROR FDATA
|
||
2981 90E6 BCC GETBO2
|
||
|
||
2983 A5FB LDA FDATA
|
||
2985 49FF EOR #$FF
|
||
2987 60 RTS
|
||
|
||
2988 ; -----------------
|
||
2988 ; SEND BYTE TO DISK
|
||
2988 ; -----------------
|
||
|
||
2988 85FB SNDBYT: STA FDATA
|
||
|
||
298A A208 LDX #8
|
||
298C 20C229 BIT: JSR SCLK1
|
||
|
||
298F 20B929 WAITD: JSR SETTLE
|
||
2992 2980 AND #$80
|
||
2994 D0F9 BNE WAITD
|
||
2996 20CB29 JSR SCLK0
|
||
|
||
2999 20B929 SNDBO1: JSR SETTLE
|
||
299C A8 TAY
|
||
299D 2980 AND #$80
|
||
299F F0F8 BEQ SNDBO1
|
||
|
||
29A1 98 TYA
|
||
29A2 0910 ORA #$10
|
||
29A4 46FB LSR FDATA
|
||
29A6 9002 BCC SNDBO2
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. --- MACHINE DEPENDENT I/O PAGE 129
|
||
--- FAST DISK READ: CBM64 ---
|
||
|
||
29A8 0920 ORA #$20
|
||
|
||
29AA 8D00DD SNDBO2: STA CI2PRA
|
||
|
||
29AD A007 LDY #7
|
||
29AF 88 SNDBO3: DEY
|
||
29B0 D0FD BNE SNDBO3
|
||
29B2 20CB29 JSR SCLK0
|
||
|
||
29B5 CA DEX
|
||
29B6 D0D4 BNE BIT
|
||
29B8 60 RTS
|
||
|
||
29B9 ; ---------------------------
|
||
29B9 ; WAIT FOR I/O PORT TO SETTLE
|
||
29B9 ; ---------------------------
|
||
|
||
29B9 AD00DD SETTLE: LDA CI2PRA
|
||
29BC CD00DD CMP CI2PRA
|
||
29BF D0F8 BNE SETTLE
|
||
29C1 60 RTS
|
||
|
||
29C2 ; ---------------
|
||
29C2 ; SET CLKOUT TO 1
|
||
29C2 ; ---------------
|
||
|
||
29C2 AD00DD SCLK1: LDA CI2PRA
|
||
29C5 0910 ORA #$10
|
||
29C7 29DF AND #$DF
|
||
29C9 D005 BNE PUTPRT
|
||
|
||
29CB ; ---------------
|
||
29CB ; SET CLKOUT TO 0
|
||
29CB ; ---------------
|
||
|
||
29CB AD00DD SCLK0: LDA CI2PRA
|
||
29CE 29CF AND #$CF
|
||
|
||
29D0 8D00DD PUTPRT: STA CI2PRA
|
||
29D3 EA NOP
|
||
29D4 EA NOP
|
||
29D5 60 RTS
|
||
|
||
END
|
||
|
||
29D6 IF DEBUG
|
||
29D6 INCLUD BUGGER.ASM
|
||
29D6 ENDIF
|
||
|
||
0000 END
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. PAGE 130
|
||
---- SYMBOL TABLE ----
|
||
|
||
A12VAL 11BD BYTGET 0544 CURSOR 0340 DORET 15CA FINIT 28C1
|
||
A2VAL 1456 BYTSND 0577 CURX 2083 DORTI 2357 FIRST1 12FE
|
||
ABQUOT 167C CBINV 0316 CUTHI D416 DOSAVE 267B FL0 1E5B
|
||
ABREM 166E CEX 1E58 CUTLO D415 DOSCRL 2148 FL1 1E65
|
||
ABSDIV 1653 CHANGE 24D7 CYCLE 00E0 DOSCRN 22D9 FL2 1E70
|
||
ABYTE 000D CHAR 2128 CZSL 1C2C DOSIB 18EF FL3 1E7A
|
||
ACLOSE 27D8 CHKEOL 213A D10EX 27E8 DOSTRT 1E13 FLAGSU 1D74
|
||
ADEX 000E CHKIN FFC6 D10L 27DF DOTIME 1F9A FLEX 1950
|
||
ALLSET 2569 CHKOUT FFC9 D6510 0000 DOUT 21F8 FLS0 1D8D
|
||
AOPEN 27B7 CHRIN FFCF DATA 000A DOXM 200D FLS1 1D8E
|
||
ARG1 0005 CHROUT FFD2 DATIN 0001 DOXOP 0FC6 FLS2 1DA6
|
||
ARG2 0007 CHRTBL 1CFE DATOUT 0002 DRIVE 007A FLSL 1D9F
|
||
ARG3 0009 CI2PRA DD00 DBLOCK 0070 DRVSET 2528 FLUSH 1E59
|
||
ARG4 000B CINT FF81 DBUFF 0072 DSECT 27F4 FLUSHW 193B
|
||
ATDCY1 D405 CINV 0314 DC0 0F6F DSKCNT 1C00 FNT0 28DC
|
||
ATDCY2 D40C CLALL FFE7 DC1 0F76 DSKERR 2421 FOFF 2926
|
||
ATDCY3 D413 CLD0 0E28 DCLOSE 27D3 DSOR 007F FREEZE 1DF8
|
||
ATNIN 0080 CLICK 2100 DCMND 2900 DT0 1FBE FREHI1 D401
|
||
BACKSP 0014 CLK0 053C DCOMM 27EA DT1 1FC4 FREHI2 D408
|
||
BACKUP 21BE CLKIN 0004 DEBNC 0533 DTEMP 0081 FREHI3 D40F
|
||
BADISK 28BC CLKOUT 0008 DEBUG 0000 DTRAK 27F0 FRELO1 D400
|
||
BADKEY 20DE CLOCK 1F02 DECVAL 11AA DVD 007D FRELO2 D407
|
||
BADOP1 1025 CLOCKL 0006 DEFAL 2436 DVLP 23A7 FRELO3 D40E
|
||
BADOP2 1062 CLOSE FFC3 DEFALL 0010 DVLP1 23BF FWL1 19A0
|
||
BADRES 2746 CLRCHN FFCC DEFNUM 2443 DVLP2 23E2 FWORDS 0033
|
||
BADSAV 2675 CLS 230E DFST1 2918 DVX 11B5 FWSUCC 19DC
|
||
BADVER 12E2 CLS0 2321 DGC 1809 DWRITE 288A GAME 25E9
|
||
BCALC 1544 CMDEND 0532 DIGCNT 1805 EAR0 1ACF GAMEL 0021
|
||
BEX 2854 CMDWT 050B DIGITS 005E EAR1 1AD9 GDEX 23FA
|
||
BGCOLO D021 CMLL 000F DIRECT 1B4F EARLY 1AC7 GDKL 23EC
|
||
BIT 298C CN0 0E4E DISK 2855 ECON 1DC6 GDRIVE 0077
|
||
BITSND 057B CNL 1CB1 DISKE 1AC2 EFIND 192D GETBIT 294B
|
||
BLANK 1B61 CNOK 1CBA DIV10 27DD ENDLIN 21C8 GETBO0 2953
|
||
BLINK 007B COLD 0E00 DIVERR 16BB ENTRY 0047 GETBO1 2961
|
||
BLNSW 00CC COLOR 0286 DIVEX 167B ENUMB 1DC1 GETBO2 2969
|
||
BOOP 22E4 COLRAM D800 DIVIDE 163E EOL 000D GETBO3 2971
|
||
BPLINE 2834 COMLIN 27E9 DLINE 21F0 EQBAD 16FA GETBYT 1A1A
|
||
BPLL 0008 COMPAR 145E DLS0 1435 EQOK 16F7 GETDRV 2514
|
||
BREAK 1951 CONCNT 0053 DNAME 28FE ERRM 1DB2 GETDSK 238A
|
||
BRKTBL 1962 CONIN 0054 DOB2 1157 ERRML 0012 GETIN FFE4
|
||
BSND0 058A CONOUT 0055 DOCALL 1706 ESIZE 004B GETKEY 2059
|
||
BSND1 0592 CONTOP 1C3B DODEF 2446 ETPEX 1599 GETLNG 1076
|
||
BSND2 05A7 CONZST 1C29 DODIS 0FD5 EXEC 00E0 GETP1 155B
|
||
BSND3 05AA COUT 1E45 DOEQ 16D3 EXTCOL D020 GETP2 156A
|
||
BUF1 0300 CR1 1ECC DOFAST 290A FALSE 0000 GETP3 157D
|
||
BUF2 0400 CSET0 1C70 DOFREQ 1B7F FAST 0002 GETPB 158D
|
||
BUF3 0500 CSET2 1C82 DOGET 1531 FASTEN 00FD GETPOS 24DC
|
||
BUF4 0600 CSHIP 1C75 DOM0 1FF4 FBRK 1978 GETPT1 15A3
|
||
BUF5 0700 CTABLE 1CAF DOMINS 1FE9 FDATA 00FB GETPT2 15B2
|
||
BUFSAV 0D20 CTEST 1C60 DOPEN 279D FINDEX 00FC GETPT3 15B8
|
||
BUMP 00C0 CURSON 2455 DOPM 200B FINDW 197A GETPW 1593
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. PAGE 131
|
||
---- SYMBOL TABLE ----
|
||
|
||
GETRES 23E4 IVX 11BC MPCL 001F OP1 0FFB PNTR 00D3
|
||
GETRET 25B6 J 0013 MPCM 0020 OP1A 1005 POPVAL 10B0
|
||
GETSET 1BD5 JOBS 0000 MPCPNT 0023 OP1B 100F POSIT 245E
|
||
GETSHT 1072 JUMPC 00D0 MPOS 2483 OP1EX 1016 POSITL 000D
|
||
GETV 1079 K 0015 MSGFLG 009D OP2 102A POSSET 24F0
|
||
GETVAR 108A KEYD 0277 MSIGX D010 OP2A 1034 POUND 27B6
|
||
GETVR1 108F KEYLOG 028F MSTART 0800 OP2B 1037 POUNDL 0001
|
||
GETVRG 10A3 KEYTAB 00F5 MTEMP 005A OP2C 1046 PP0 2221
|
||
GETVRL 1093 LBUFF 0200 NARGS 0004 OP2D 1049 PP1 2244
|
||
GETWRD 1AF0 LDPRE 0F3C NBL 1958 OP2EX 1053 PP2 224D
|
||
GETYES 2544 LDTB1 00D9 NBRKS 0006 OPCODE 0003 PP3 225C
|
||
GETZ1 1BFC LENGTH 0060 NDX 00C6 OPEN FFC0 PP5 2266
|
||
GETZ2 1C17 LET0 211B NENTS 0049 OPEXT 0F7D PPERR 223E
|
||
GETZ3 1C23 LETEX 2125 NEWLOG 234A OPT0 11C6 PPRINT 2204
|
||
GETZCH 1BE1 LETTER 2112 NEWSET 1B65 OPT1 11E2 PPX 1D6E
|
||
GKEY0 205D LEX1 21D8 NEXTPC 19E4 OPT2 1202 PREDB 113B
|
||
GKEY1 208F LEX2 21E5 NEXTZ 1C49 OPTX 1234 PREDB1 115E
|
||
GLOBAL 002F LFROM 006A NLG0 234C OPX0 0F88 PREDB2 1169
|
||
GO 0FE7 LINCNT 0065 NMINV 0318 OPX1 0F8E PREDB3 1170
|
||
GODIV 1660 LINEX 1EEA NO 24CB OPX2 0F98 PREDB5 118E
|
||
GPOSIT 0076 LINLEN 0045 NOBLIN 20A7 OPX3 0FA2 PREDF 112A
|
||
GS 1BDC LINOUT 1ED5 NOL 0003 OPX4 0FBD PREDLB 114B
|
||
GTBIT 0548 LMAX 0066 NOLOG 207C OPXNXT 0FA9 PREDNB 112F
|
||
GTBO0 0562 LO 0000 NOMORE 21AD OUT 003D PREDS 1136
|
||
GTBT0 1A2C LOCALS 0D00 NOPS0 000E OUTEOL 2187 PRIL 1270
|
||
GTBT1 1A33 LOCSAV 271B NOPS1 0010 OVER 10D8 PRLEN 006F
|
||
GTBT2 1A3C LOLINE 2358 NOPS2 0019 PAGE 1A50 PRNTDC 139D
|
||
GTBT3 1A4E LOUT 1EDD NOPSX 000C PAGE0 0028 PRNTN3 1821
|
||
GTEXIT 1C25 LREST 2776 NORAM 0EEF PARAMS 24CE PRNTN4 182A
|
||
GTRT 25B9 LRU 0025 NORM 1956 PARERR 25AC PROPB 1D41
|
||
GTZ0 1BE7 LRUMAP 0C50 NOSCRL 217D PATCH 1A25 PROPL 1D62
|
||
GVCALC 1114 LSAVE 26C5 NPC0 19F6 PB 1800 PROPN 1D5D
|
||
HDRS 0006 LSTX 00C5 NPC1 19FD PBAD 1488 PROPNX 1D6A
|
||
HI 0001 LTO 006C NPC2 1A06 PCALC 17A8 PRY1 2595
|
||
HIBASE 0288 MASK 20B4 NPC3 1A18 PCLOSE 2262 PSET 004C
|
||
HILINE 2371 MASK0 20CA NUMBER 17F9 PDC0 13B2 PSHVAL 10C6
|
||
I 0011 MASK1 20D2 NXTP1 15D4 PEX 2277 PSTAT 006E
|
||
I0 279B MCLR 1EF5 NXTP2 15E3 PFINE 1307 PTABH 0BA0
|
||
I0L 0002 MDRI 248D NXTP3 15E6 PG1 1A58 PTABL 0B00
|
||
IN 0037 MEMTOP 1E3B NXTSEC 240D PG2 1A65 PTKL 23FF
|
||
INCVAL 11B6 MIND 2478 OBJ1 1D2E PG3 1A6C PTZ0 1328
|
||
INDEX 000B MINDL 002F OBJ2 1D35 PG4 1A8E PUSHXA 10CA
|
||
INIT0 0500 MINIT 16C0 OBJLOC 1D18 PG5 1AA0 PUTBYT 10E8
|
||
INLOOP 2197 MLOOP 0F60 OBJTAB 0035 PG6 1AAB PUTDSK 23FD
|
||
INPUT 218D MODE 0291 OFFSET 004F PG7 1AB7 PUTLSB 17A3
|
||
INSM 24A7 MORE 1EEF OFFSPL 22AD PG8 1ABC PUTP1 17BE
|
||
INSML 0020 MOREL 0006 OLDLEN 0061 PGOOD 149B PUTP2 17CD
|
||
IOBUFF 0800 MOVMIN 1FCF OLDX 0063 PLERR 17E7 PUTP3 17DD
|
||
IOCHAR 0067 MPC 001F OLDY 0064 PLOT FFF0 PUTPRT 29D0
|
||
IOINIT FF84 MPCFLG 0022 OLDZSP 0018 PMAX 0029 PUTVAL 10EE
|
||
IRQMSK D01A MPCH 0021 OP0 0FEC PNERR 17E2 PUTVLG 1107
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. PAGE 132
|
||
---- SYMBOL TABLE ----
|
||
|
||
PUTVLL 10F7 RSIGN 005D SHOVE 1B33 SPSTAT 0069 TRY3 16EB
|
||
PUTVR1 10F3 RSING 26E5 SHOWIT 21A6 SPT0 07F8 TSET 004D
|
||
PWHI1 D403 RSINGL 001A SHUTD 28B0 SPT1 07F9 TSTDO3 05C1
|
||
PWHI2 D40A RSPOS 26F9 SIB 1968 SPT2 07FA TSTDO4 05C9
|
||
PWHI3 D411 RTN 25CC SIGVOL D418 SPT3 07FB TSTDO5 05C5
|
||
PWLO1 D402 RTNL 001D SLINE 0068 SPT4 07FC UDIV 168A
|
||
PWLO2 D409 RVS 00C7 SLOAD 0E66 SPT5 07FD UDLOOP 1693
|
||
PWLO3 D410 SAV 263F SLOADL 0019 SPT6 07FE UDNEXT 16AB
|
||
PYUCK 12EB SAVDRI 24C5 SLOW 2862 SPT7 07FF UEX 2833
|
||
PZSTR 1B0D SAVL 000E SNDBO1 2999 SREADY 259F UNDER 10C1
|
||
PZTOP 1B16 SAVRES 2426 SNDBO2 29AA SRL0 214F USL0 1F30
|
||
QSIGN 005C SAY1 1CCA SNDBO3 29AF SRL1 216A USLX 201E
|
||
QUOT 0056 SAY2 1CD5 SNDBYT 2988 SRL2 2173 V2A1 1067
|
||
R6510 0001 SAYSET 1CBF SOURCE 0043 SRL3 2177 VALUE 000F
|
||
RAMTAS FF87 SBL 196F SP0COL D027 SRLP 262E VARGET 1081
|
||
RAND D41B SBPL 2848 SP0X D000 SROOM 2629 VARPUT 10DD
|
||
RANDOM 1E3E SCEX 147A SP0Y D001 ST0 0EAA VCREG1 D404
|
||
RASTER D012 SCLK0 29CB SP1COL D028 ST1A 0EB4 VCREG2 D40B
|
||
RAZZ 2301 SCLK1 29C2 SP1X D002 ST1B 0EC2 VCREG3 D412
|
||
RDFILE 05BD SCM0 2827 SP1Y D003 STAMP 002D VERIFY 00A0
|
||
READ 0080 SCMP 1470 SP2COL D029 STATEX 2015 VERNUM 1E2F
|
||
READ1 287F SCNKEY FF9F SP2X D004 STKERR 13FB VERS 1E1E
|
||
READL 188A SCOMP 1465 SP2Y D005 STKEY 0091 VERSL 0011
|
||
READL2 18D5 SCON 280F SP3COL D02A STRING 21F9 VEXIT 1425
|
||
READL3 18F7 SCORE 1EFB SP3X D006 SUREL1 D406 VICIRQ D019
|
||
READST FFB7 SCOREL 0007 SP3Y D007 SUREL2 D40D VMCSB D018
|
||
REMAIN 0058 SCREEN 0400 SP4COL D02B SUREL3 D414 VOCAB 0031
|
||
REMVC1 1380 SCRIPT 0062 SP4X D008 SVING 264D VSUM 12AE
|
||
REMVC2 1391 SCROLX D016 SP4Y D009 SVINGL 0017 VSUM0 12BA
|
||
REMVEX 139A SCROLY D011 SP5COL D02C SVPOS 265E WAITD 298F
|
||
RES 26D4 SECSEK 00B8 SP5X D00A SWAP 002E WARM1 0E7F
|
||
RESL 0011 SECTOK 2417 SP5Y D00B TARGET 002B WARM2 0EA6
|
||
RESON D417 SECTOR 0075 SP6COL D02D TBLX 00D6 WARMEX 0F48
|
||
RESULT 0044 SEEK 00B0 SP6X D00C TBT0 2622 WCALC 1540
|
||
RESZPC 2789 SENDU 27F8 SP6Y D00D TCON 27FF WCEX 1129
|
||
RET0 10E6 SET1 1B39 SP7COL D02E TDRIVE 0079 WDRIV 246B
|
||
RET1 13CF SET2 1B41 SP7X D00E TICK 20E4 WDRIVL 000D
|
||
RET2 13E3 SETA0 0EFA SP7Y D00F TIME 00A2 WNEXT 19BD
|
||
RETEX 25C6 SETBP 283C SPACE 0020 TIMEFL 005F WNX 19C8
|
||
RETRY 255D SETDRV 252A SPBGPR D01B TOASC 1B30 WNX1 19D3
|
||
RETURN 25AD SETLFS FFBA SPCALC 22A3 TOBOOT 260A WR0 273D
|
||
RFLIP 166A SETMSG FF90 SPEED 0598 TOBOT 22D4 WRDLEN 0046
|
||
RIGHT 274C SETNAM FFBD SPENA D015 TOPERM 1B73 WRITE 0090
|
||
RL0 1898 SETNP 0EF4 SPL0 228B TOQ 1DFB WRITE1 28A0
|
||
RL1 189D SETPOS 24F2 SPL1 2299 TOQL 000E WRONG 273B
|
||
RL2 18A4 SETSTR 1AFB SPLEX 22AC TOTOP 22CC WRTERR 241B
|
||
RL3 18AD SETTLE 29B9 SPLOFF 22B0 TPOSIT 0078 XMAX 0289
|
||
RLERR 1894 SETWRD 1AE1 SPMC D01C TRACK 0074 XSIZE 0027
|
||
RLEX 18A3 SFDX 00CB SPRT13 0340 TRKERR 241C XXPAND D01D
|
||
RLL 18B3 SFLAG 2203 SPRT14 0380 TRUE 00FF YES 24C7
|
||
RPTFLG 028A SHFLAG 028D SPRT15 03C0 TRY2 16DF YESL 0004
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
ZIP/6502-C INFOCOM, INC. PAGE 133
|
||
---- SYMBOL TABLE ----
|
||
|
||
YSIZE 0018 ZEQUAL 16CA ZLESS 142C ZPOP 185F ZRT0 124E
|
||
YXPAND D017 ZEROPG 0003 ZLOC 130A ZPRB 134B ZRT1 1250
|
||
ZADD 15EC ZERROR 1DC4 ZMLOOP 1609 ZPRC 17EC ZRTRUE 124C
|
||
ZBAND 14AA ZFCLR 14DD ZMNEXT 1620 ZPRD 139B ZSAVE 2664
|
||
ZBCOM 141C ZFIRST 12F7 ZMOD 1634 ZPRI 125B ZSCRIP 0010
|
||
ZBEGIN 2A00 ZFLAG 0050 ZMODE 0001 ZPRINT 1406 ZSCRN 22BE
|
||
ZBOR 149E ZFSET 14CA ZMOVE 1501 ZPRN 17F1 ZSERIA 0012
|
||
ZBTST 148B ZFSETP 14B6 ZMUL 1606 ZPRR 1278 ZSET 14F4
|
||
ZCALL 16FD ZFWORD 0018 ZMVEX 152A ZPTSIZ 1316 ZSP 0017
|
||
ZCALL1 1734 ZGET 152B ZNEXT 12EE ZPURBT 000E ZSPLIT 227A
|
||
ZCALL2 175B ZGETB 153B ZNEXTP 15CD ZPURE 0027 ZSTAKH 0A00
|
||
ZCALL3 1785 ZGETP 1558 ZNOOP 11A9 ZPUSH 1858 ZSTAKL 0900
|
||
ZCHAR 004E ZGETPT 15A0 ZOBJEC 000A ZPUT 1792 ZSTART 1E09
|
||
ZCHKSM 001C ZGLOBA 000C ZOOM 2947 ZPUTB 17A0 ZSTEX 1B0C
|
||
ZCODE 0026 ZGO 0006 ZPAGE 002A ZPUTP 17BB ZSUB 15F9
|
||
ZCR0 1EA8 ZGRTR 1440 ZPC 0019 ZQUIT 1DE5 ZUSL 1F08
|
||
ZCRLF 1E83 ZID 0002 ZPCFLG 001C ZRAND 1836 ZVALUE 1414
|
||
ZCRUSH 1CD8 ZIGRTR 144B ZPCH 001B ZREAD 1867 ZVER 1287
|
||
ZD0 1346 ZIN 147B ZPCL 0019 ZREMOV 1359 ZVERS 0000
|
||
ZDEC 133E ZINC 1333 ZPCM 001A ZREST 26FF ZVOCAB 0008
|
||
ZDIV 162A ZIP 0E00 ZPCPNT 001D ZRET 13B8 ZVR 128E
|
||
ZDLESS 1432 ZJUMP 1400 ZPCSAV 269C ZRFALS 1257 ZWORD 0051
|
||
ZENDLD 0004 ZLENTH 001A ZPGTOP 008F ZRSTAK 1281 ZZERO 12E5
|
||
|
||
***** NO ERRORS DETECTED *****
|