mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-01-11 23:43:24 +00:00
6290 lines
270 KiB
Plaintext
6290 lines
270 KiB
Plaintext
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 1
|
||
|
||
|
||
|
||
0000 ; ----------------------------
|
||
0000 ; GRIP/6502 1.0
|
||
0000 ; G-CODE INTERPRETER PROGRAM
|
||
0000 ; FOR ATARI 400/800/1200/XL
|
||
0000 ; ----------------------------
|
||
|
||
0000 ; INFOCOM, INC.
|
||
0000 ; 55 WHEELER STREET
|
||
0000 ; CAMBRIDGE, MA 02138
|
||
|
||
0000 ; COMPANY PRIVATE -- NOT FOR DISTRIBUTION
|
||
|
||
0000 ; -------------------------
|
||
0000 ; MEMORY ALLOCATION EQUATES
|
||
0000 ; -------------------------
|
||
|
||
0000 ; THESE MUST BE DEFINED FOR EACH MACHINE
|
||
|
||
;ZSTART EQU $80 ; FIRST FREE ZERO-PAGE LOCATION
|
||
|
||
;***
|
||
;ZSTART EQU $7E ; FIRST FREE ZERO-PAGE LOCATION
|
||
;***
|
||
|
||
;***
|
||
006B ZSTART EQU $6B ; FIRST FREE ZERO-PAGE LOCATION
|
||
;***
|
||
|
||
00FF ZEND EQU $FF ; LAST FREE ZERO-PAGE LOCATION
|
||
0400 MSTART EQU $0400 ; FIRST FREE RAM LOCATION
|
||
|
||
0000 DEBUG EQU 0 ; ASSEMBLY FLAG FOR DEBUGGER
|
||
|
||
0000 ; -----------
|
||
0000 ; ERROR CODES
|
||
0000 ; -----------
|
||
|
||
0000 ; 00 -- GAME PRELOAD TOO BIG
|
||
0000 ; 01 -- IMAGE PRELOAD TOO BIG
|
||
0000 ; 02 -- UNDEFINED X-OP
|
||
0000 ; 03 -- UNDEFINED 0-OP
|
||
0000 ; 04 -- UNDEFINED 1-OP
|
||
0000 ; 05 -- UNDEFINED 2-OP
|
||
0000 ; 06 -- G-STACK UNDERFLOW
|
||
0000 ; 07 -- G-STACK OVERFLOW
|
||
0000 ; 08 -- DIVISION BY ZERO
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 2
|
||
|
||
|
||
0000 ; 09 -- PURITY VIOLATION (PUT/PUTB/ITER)
|
||
0000 ; 0A -- DISK ADDRESS RANGE
|
||
0000 ; 0B -- DISK ACCESS
|
||
0000 ; 0C -- NO CALL ADDRESS
|
||
0000 ; 0D -- UNDEFINED SOUND
|
||
0000 ; 0E -- PURITY VIOLATION (SETI/SWAPI)
|
||
|
||
0000 ; ----------------
|
||
0000 ; BATCH PROCESSING
|
||
0000 ; ----------------
|
||
|
||
INCLUD EQ.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 3
|
||
--- SOFTWARE EQUATES ---
|
||
|
||
|
||
0000 ; -------------------
|
||
0000 ; MEMORY ORGANIZATION
|
||
0000 ; -------------------
|
||
|
||
0400 BUFFER EQU MSTART ; 256-BYTE DISK BUFFER
|
||
0500 GSTAKL EQU MSTART+$100 ; G-STACK LSBS
|
||
0600 GSTAKH EQU MSTART+$200 ; G-STACK MSBS
|
||
0700 MEMMAP EQU MSTART+$300 ; ABSOLUTE MEMORY MAP
|
||
0800 PAGMAP EQU MSTART+$400 ; PAGING BUFFER MAP (128 BYTES)
|
||
0880 LRUMAP EQU MSTART+$480 ; LRU MAP (128 BYTES)
|
||
0900 VLOWS EQU MSTART+$500 ; LSB PLOT TABLE (192 BYTES)
|
||
09C0 VHIGHS EQU VLOWS+$C0 ; MSB PLOT TABLE (192 BYTES)
|
||
0A80 LOCALS EQU VLOWS+$180 ; LOCAL VARIABLE STORAGE (32 BYTES)
|
||
0AA0 CARGS EQU LOCALS+$20 ; CALL ARGUMENT STORAGE (32 BYTES)
|
||
0AC0 CTYPES EQU CARGS+$20 ; CALL ARGUMENT LIST (16 BYTES)
|
||
0B00 GRIP EQU MSTART+$700 ; BEGINNING OF GRIP CODE
|
||
2300 GBEGIN EQU GRIP+$1800 ; START OF PRELOAD
|
||
|
||
0000 ; -----------------
|
||
0000 ; PROGRAM CONSTANTS
|
||
0000 ; -----------------
|
||
|
||
0000 FALSE EQU 0
|
||
00FF TRUE EQU $FF
|
||
0000 LO EQU 0
|
||
0001 HI EQU 1
|
||
0042 INTRP EQU 'B' ; INTERPRETER VERSION #
|
||
|
||
0000 ; ---------------------
|
||
0000 ; G-CODE HEADER OFFSETS
|
||
0000 ; ---------------------
|
||
|
||
0000 GVERS EQU 0 ; (BYTE) G-MACHINE VERSION ("1")
|
||
0001 GMODE EQU 1 ; (BYTE) MODE BYTE
|
||
0002 GID EQU 2 ; (WORD) GAME ID
|
||
0004 GEND EQU 4 ; (WORD) END OF G-PRELOAD
|
||
0006 GSTART EQU 6 ; (WORD) EXECUTION START ADDRESS
|
||
0008 GPUR EQU 8 ; (WORD) START OF PURE G-CODE
|
||
000A GGLOB EQU 10 ; (WORD) START OF GLOBAL VARIABLE TABLE
|
||
000C GSER EQU 12 ; (6 BYTES) ASCII SERIAL NUMBER
|
||
0012 GLEN EQU 18 ; (WORD) LENGTH OF G-PROGRAM IN BYTES
|
||
0014 GCHECK EQU 20 ; (WORD) G-CODE CHECKSUM
|
||
0016 IVERS EQU 22 ; (WORD) INTERPRETER VERSION
|
||
|
||
0000 ; ---------------------
|
||
0000 ; I-FILE HEADER OFFSETS
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 4
|
||
--- SOFTWARE EQUATES ---
|
||
|
||
0000 ; ---------------------
|
||
|
||
0000 ILEN EQU 0 ; (WORD) I-FILE LENGTH IN BYTES
|
||
0002 IEND EQU 2 ; (WORD) END OF I-FILE PRELOAD
|
||
0004 ICHECK EQU 4 ; (WORD) I-FILE CHECKSUM WORD
|
||
0006 IBLKS EQU 6 ; (BYTE) # BLOCKSETS IN FILE
|
||
0007 IICONS EQU 7 ; (BYTE) # ICONS IN FILE
|
||
|
||
0000 ; -------------------
|
||
0000 ; ZERO-PAGE VARIABLES
|
||
0000 ; -------------------
|
||
|
||
006B OPCODE EQU ZSTART ; (BYTE) CURRENT OPCODE
|
||
006C NARGS EQU OPCODE+1 ; (BYTE) CURRENT # ARGUMENTS
|
||
006D ARG1 EQU OPCODE+2 ; (WORD) ARGUMENT 1 REGISTER
|
||
006F ARG2 EQU OPCODE+4 ; (WORD) ARGUMENT 2 REGISTER
|
||
0071 ARG3 EQU OPCODE+6 ; (WORD) ARGUMENT 3 REGISTER
|
||
0073 ARG4 EQU OPCODE+8 ; (WORD) ARGUMENT 4 REGISTER
|
||
0075 ABYTE EQU OPCODE+10 ; (BYTE) X-OP ARGUMENT BYTE
|
||
0076 ADEX EQU OPCODE+11 ; (BYTE) X-OP ARGUMENT INDEX
|
||
0077 ADEX2 EQU OPCODE+12 ; (BYTE) "CALL" ARG-BYTE INDEX
|
||
|
||
0078 VALUE EQU OPCODE+13 ; (WORD) VALUE RETURN REGISTER
|
||
007A I EQU VALUE+2 ; (WORD) GENERAL INDEX REGISTER #1
|
||
007C J EQU VALUE+4 ; (WORD) GENERAL INDEX REGISTER #2
|
||
007E K EQU VALUE+6 ; (WORD) " " " #3
|
||
|
||
0080 GPC EQU VALUE+8 ; (WORD) G-CODE PROGRAM COUNTER
|
||
0080 GPCL EQU GPC ; (BYTE) LSB OF GPC
|
||
0081 GPCH EQU GPC+1 ; (BYTE) MSB OF GPC
|
||
|
||
;***
|
||
0082 GPC0: EQU GPC+2 ; (BYTE) BIT 0 OF BYTE IS BIT 0 OF GPC
|
||
;***
|
||
|
||
0083 GPCFLG EQU GPC+3 ; (BYTE) GPC VALIDITY FLAG
|
||
0084 GPOINT EQU GPC+4 ; (WORD) ABSOLUTE G-MEMORY POINTER
|
||
|
||
0086 VPC EQU GPC+6 ; (WORD) VIRTUAL MEMORY POINTER
|
||
0086 VPCL EQU VPC ; (BYTE) LSB OF VPC
|
||
0087 VPCH EQU VPC+1 ; (BYTE) MSB OF VPC
|
||
|
||
;***
|
||
0088 VPC0 EQU VPC+2 ; (BYTE) LEAST SIG BIT OF VPC
|
||
;***
|
||
|
||
0089 VPCFLG EQU VPC+3 ; (BYTE) VPC VALIDITY FLAG
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 5
|
||
--- SOFTWARE EQUATES ---
|
||
|
||
008A VPOINT EQU VPC+4 ; (WORD) ABSOLUTE V-MEMORY POINTER
|
||
008C VPCSAV EQU VPC+6 ; (WORD) [VPC] SAVE REGISTER
|
||
|
||
008E GSP EQU VPC+8 ; (BYTE) G-STACK POINTER
|
||
008F OLDGSP EQU GSP+1 ; (BYTE) OLD G-STACK POINTER
|
||
|
||
0090 GCODE EQU GSP+2 ; (BYTE) ABS 1ST PAGE OF G-PRELOAD
|
||
0091 ICODE EQU GCODE+1 ; (WORD) ABS START ADDR OF I-PRELOAD
|
||
|
||
0093 GPURE EQU GCODE+3 ; (BYTE) 1ST V-PAGE OF "PURE" G-CODE
|
||
0094 ISTART EQU GPURE+1 ; (BYTE) 1ST V-PAGE OF I-FILE
|
||
0095 IPURE EQU GPURE+2 ; (BYTE) 1ST V-PAGE OF "PURE" I-FILE
|
||
|
||
0096 PAGE0 EQU GPURE+3 ; (BYTE) ABS 1ST PAGE OF PAGING SPACE
|
||
0097 PMAX EQU PAGE0+1 ; (BYTE) MAXIMUM # SWAPPING PAGES
|
||
0098 STAMP EQU PAGE0+2 ; (BYTE) LRU TIMESTAMP
|
||
0099 LRU EQU PAGE0+3 ; (BYTE) EARLIEST TIMESTAMP
|
||
009A SWAP EQU PAGE0+4 ; (BYTE) LRU SWAPPING PAGE
|
||
009B TARGET EQU PAGE0+5 ; (BYTE) TARGET BUFFER ADDRESS
|
||
|
||
009C GLOBAL EQU PAGE0+6 ; (WORD) ABSOLUTE GLOBAL TABLE ADDR
|
||
009E BTAB EQU GLOBAL+2 ; (WORD) ABSOLUTE BLOCKSET TABLE ADDR
|
||
00A0 ITAB EQU GLOBAL+4 ; (WORD) ABSOLUTE ICON TABLE ADDR
|
||
00A2 NBLOKS EQU GLOBAL+6 ; (BYTE) # BLOCKSETS IN I-FILE
|
||
00A3 NICONS EQU GLOBAL+7 ; (BYTE) # ICONS IN I-FILE
|
||
|
||
00A4 QUOT EQU GLOBAL+8 ; (WORD) QUOTIENT REGISTER
|
||
00A6 REMAIN EQU QUOT+2 ; (WORD) REMAINDER REGISTER
|
||
00A8 MTEMP EQU QUOT+4 ; (WORD) TEMP MATH REGISTER
|
||
00AA QSIGN EQU QUOT+6 ; (BYTE) SIGN OF QUOTIENT
|
||
00AB RSIGN EQU QUOT+7 ; (BYTE) SIGN OF REMAINDER
|
||
00AC MUSHFT EQU QUOT+8 ; (BYTE) MULTIPLY TEMP FOR BLOCKS
|
||
00AD MUL EQU QUOT+9 ; (BYTE) DITTO
|
||
00AE MUH EQU QUOT+10 ; (BYTE) DITTO
|
||
|
||
00AF IADR1 EQU QUOT+11 ; (WORD) ABS ADDR OF ICON #1
|
||
|
||
;***
|
||
00B1 IADR10 EQU IADR1+2 ; (BYTE) SAME IDEA AS VPC0
|
||
;***
|
||
|
||
00B2 IADR2 EQU IADR1+3 ; (WORD) ABS ADDR OF ICON #2
|
||
|
||
;***
|
||
00B4 IADR20 EQU IADR1+5 ; (BYTE) SAME IDEA AS VPC0
|
||
;***
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 6
|
||
--- SOFTWARE EQUATES ---
|
||
|
||
00B5 IX1 EQU IADR1+6 ; (BYTE) X-SIZE OF ICON #1
|
||
00B6 IX2 EQU IADR1+7 ; (BYTE) X-SIZE OF ICON #2
|
||
00B7 IY1 EQU IADR1+8 ; (BYTE) Y-SIZE OF ICON #1
|
||
00B8 IY2 EQU IADR1+9 ; (BYTE) Y-SIZE OF ICON #2
|
||
00B9 XDEX1 EQU IADR1+10 ; (BYTE) X-INDEX #1
|
||
00BA XDEX2 EQU IADR1+11 ; (BYTE) X-INDEX #2
|
||
00BB YDEX1 EQU IADR1+12 ; (BYTE) Y-INDEX #1
|
||
00BC YDEX2 EQU IADR1+13 ; (BYTE) Y-INDEX #2
|
||
00BD ITERS EQU IADR1+14 ; (BYTE) # ICON ITERATIONS
|
||
00BE ITICN EQU IADR1+15 ; (BYTE) COUNTER FOR ITERATE ROUTINE
|
||
00BF ITPNT EQU IADR1+16 ; (BYTE) COUTNER FOR ITERATE ROUTINE
|
||
00C0 XPOS EQU IADR1+17 ; (WORD) ICON X-POSITION
|
||
00C2 YPOS EQU IADR1+19 ; (WORD) ICON Y-POSITION
|
||
00C4 TOPCUT EQU IADR1+21 ; (BYTE) TEMP FOR AMOUNT TO CUT OFF TOP IN SET
|
||
0000 ; UP ROUTINE OF SHOWI
|
||
00C5 SIDCUT EQU IADR1+22 ; (BYTE) SAME AS TOPCUT FOR SIDE
|
||
00C6 IXSKIP EQU IADR1+23 ; (BYTE) AMOUNT TO ADD TO IADR1 TO GET NEXT
|
||
0000 ; BLOCK AT NEXT ROW
|
||
00C7 MDXCUT EQU IADR1+24 ; (BYTE) IF YOU DON'T UNDERSTAND, OH WELL.
|
||
|
||
;MDYCUT EQU IADR1+25 ; (BYTE) NOT SHURE THIS IS USED IN FINAL
|
||
|
||
00C9 WINDX1 EQU IADR1+26 ; (BYTE) LEFT CLIP VALUE
|
||
00CA WINDY1 EQU WINDX1+1 ; (BYTE) RIGHT CLIP VALUE
|
||
00CB WINDX2 EQU WINDX1+2 ; (BYTE) TOP CLIP VALUE
|
||
00CC WINDY2 EQU WINDX1+3 ; (BYTE) BOTTOM CLIP VALUE
|
||
00CD WINDH EQU WINDX1+4 ; (BYTE) HEIGHT OF WINDOW (WINDY2-WINDY1)
|
||
00CE WINDW EQU WINDX1+5 ; (BYTE) WIDTH OF WINDOW (WINDX2-WINDX1)
|
||
|
||
00CF BSET EQU WINDX1+6 ; (BYTE) CURRENT BLOCKSET ID
|
||
00D0 BSADR EQU BSET+1 ; (WORD) ABS ADDR OF CURRENT BLOCKSET
|
||
00D2 BSIZE EQU BSET+3 ; (BYTE) # BLOCKS IN CURRENT BLOCKSET
|
||
00D3 BLOCK EQU BSET+4 ; (8 BYTES) IMAGE BLOCK BUFFER
|
||
00DB MASK EQU BSET+12 ; (8 BYTES) IMAGE MASK BUFFER
|
||
00E3 MSKFLG EQU BSET+20 ; (BYTE) FLAG FOR MASKING 00=DISABLED
|
||
00E4 TOX EQU BSET+21 ; (BYTE) X-SAVE FOR "DUMP"
|
||
00E5 XPSAV EQU BSET+22 ; (WORD) X-POSITION SAVE
|
||
00E7 XCURS EQU BSET+24 ; (BYTE) GAME CURSOR X-POS
|
||
00E8 YCURS EQU BSET+25 ; (BYTE) GAME CURSOR Y-POS
|
||
00E9 NEGATE EQU BSET+26 ; (BYTE) BLOCK NEGATE FLAG
|
||
00EA BLKLEN EQU BSET+27 ; (BYTE) # BYTES PER BLOCK
|
||
|
||
00EB DBLOCK EQU BSET+28 ; (BYTE) G-CODE BLOCK TO ACCESS
|
||
00EC DBTOP EQU DBLOCK+1 ; (BYTE) MSB HOLDER FOR "GETDSK"
|
||
00ED DBUFF EQU DBLOCK+2 ; (WORD) DISK BUFFER PAGE POINTER
|
||
00EF SECTOR EQU DBLOCK+4 ; (WORD) SECTOR ADDRESS
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 7
|
||
--- SOFTWARE EQUATES ---
|
||
|
||
;***
|
||
00F1 DCNT EQU DBLOCK+6 ; (BYTE) COUNTER FOR GROS
|
||
;***
|
||
|
||
00F2 LINE EQU DBLOCK+7 ; (WORD) TEXT LINE ADDRESS
|
||
00F4 LEN EQU LINE+2 ; (BYTE) TEXT LINE LENGTH
|
||
00F5 CURSOR EQU LINE+3 ; (BYTE) TEXT CURSOR POSITION (0-39)
|
||
00F6 CHKSUM EQU LINE+4 ; (WORD) HOLDS IMAGE CHECKSUM FOR VERIFY
|
||
END
|
||
INCLUD HARDEQ.ASM ; M
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 8
|
||
--- HARDWARE EQUATES: ATARI ---
|
||
|
||
|
||
A100 SCREEN EQU $A100 ; START OF SCREEN RAM
|
||
|
||
0000 ; ----------------------
|
||
0000 ; ATARI HARDWARE EQUATES
|
||
0000 ; ----------------------
|
||
|
||
0000 ; ZER0-PAGE
|
||
|
||
0009 BOOT EQU $09 ; BOOT FLAG
|
||
000A DOSVEC EQU $0A ; DOS START VECTOR
|
||
000C DOSINI EQU $0C ; DOS INIT VECTOR
|
||
0010 POKMSK EQU $10 ; FOR BREAK KEY DISABLE
|
||
0011 BRKKEY EQU $11 ; BREAK KEY FLAG
|
||
0014 RTCLOK EQU $14 ; JIFFY CLOCK
|
||
0041 SOUNDR EQU $41 ; NOISY I/O FLAG
|
||
004D ATRACT EQU $4D ; ATTRACT MODE FLAG
|
||
0054 ROWCRS EQU $54 ; OS CURSOR ROW
|
||
0055 COLCRS EQU $55 ; OS CURSOR COLUMN
|
||
0058 SAVMSC EQU $58 ; OS SCREEN ADDRESS
|
||
006A RAMTOP EQU $6A ; OS TOP OF RAM
|
||
00D4 FR0 EQU $D4 ; FP REGISTER #0
|
||
00E0 FR1 EQU $E0 ; FP REGISTER #1
|
||
00F2 CIX EQU $F2 ; FP INDEX
|
||
00F3 INBUFF EQU $F3 ; ASCII BUFFER POINTER
|
||
|
||
0000 ; PAGES 2-5
|
||
|
||
022F SDMCTL EQU $022F ; DMA CONTROL
|
||
0230 SDLSTL EQU $0230 ; DISPLAY LIST ADDRESS
|
||
0244 COLDST EQU $0244 ; COLDSTART FLAG
|
||
0278 STICK0 EQU $0278 ; JOYSTICK #0
|
||
0279 STICK1 EQU $0279 ; JOYSTICK #1
|
||
0284 STRIG0 EQU $0284 ; JOYSTICK #0 TRIGGER
|
||
0285 STRIG1 EQU $0285 ; JOYSTICK #1 TRIGGER
|
||
02C5 COLOR1 EQU $02C5 ; GRAPHICS FOREGROUND COLOR
|
||
02C6 COLOR2 EQU $02C6 ; BACKGROUND COLOR
|
||
02E4 RAMSIZ EQU $02E4 ; AMOUNT OF RAM IN SYSTEM
|
||
02F0 CRSINH EQU $02F0 ; OS CURSOR INHIBIT
|
||
02FC CH EQU $02FC ; KEYBOARD READ FLAG
|
||
0301 DUNIT EQU $0301 ; DRIVE #
|
||
0302 DCOMND EQU $0302 ; DISK COMMAND
|
||
0303 DSTATS EQU $0303 ; DISK I/O STATUS
|
||
0304 DBUFLO EQU $0304 ; DISK BUFFER ADDR (LSB)
|
||
0305 DBUFHI EQU $0305 ; DISK BUFFER ADDR (MSB)
|
||
030A DAUX1 EQU $030A ; SECTOR ADDR (LSB)
|
||
030B DAUX2 EQU $030B ; SECTOR ADDR (MSB)
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 9
|
||
--- HARDWARE EQUATES: ATARI ---
|
||
|
||
0342 ICCOM EQU $0342 ; IOCB #0 COMMAND
|
||
0344 ICBADR EQU $0344 ; IOCB #0 BUFFER ADDR
|
||
0348 ICBLEN EQU $0348 ; IOCB #0 LENGTH
|
||
034A ICAUX1 EQU $034A ; IOCB #0 AUX BYTE #1
|
||
034B ICAUX2 EQU $034B ; IOCB #0 AUX BYTE #2
|
||
03A0 TEXT EQU $03A0 ; TEXT BUFFER
|
||
0580 LBUFF EQU $0580 ; ASCII OUTPUT BUFFER
|
||
|
||
0000 ; GTIA, POKEY, ANTIC
|
||
|
||
D01F CONSOL EQU $D01F ; CONSOLE KEY REGISTER
|
||
D200 AUDF1 EQU $D200 ; AUDIO CH1 FREQ
|
||
D201 AUDC1 EQU $D201 ; AUDIO CH1 CTRL
|
||
D202 AUDF2 EQU $D202 ; AUDIO CH2 FREQ
|
||
D203 AUDC2 EQU $D203 ; AUDIO CH2 CTRL
|
||
D204 AUDF3 EQU $D204 ; AUDIO CH3 FREQ
|
||
D205 AUDC3 EQU $D205 ; AUDIO CH3 CTRL
|
||
D206 AUDF4 EQU $D206 ; AUDIO CH4 FREQ
|
||
D207 AUDC4 EQU $D207 ; AUDIO CH4 CTRL
|
||
D208 AUDCTL EQU $D208 ; AUDIO CONTROL
|
||
D20A RANDOM EQU $D20A ; RANDOM BYTE
|
||
D20E IRQEN EQU $D20E ; IRQ ENABLE
|
||
D20F SKCTL EQU $D20F ; SERIAL PORT CONTROL
|
||
D301 PORTB EQU $D301 ; PORT B (XL ROM SWITCH)
|
||
D400 DMACTL EQU $D400 ; DMA CONTROL
|
||
|
||
0000 ; OS ROM
|
||
|
||
D8E6 FASC EQU $D8E6 ; FP TO ASCII
|
||
D9AA IFP EQU $D9AA ; INTEGER TO FP
|
||
D9D2 FPI EQU $D9D2 ; FP TO INTEGER
|
||
DA44 ZFR0 EQU $DA44 ; CLEAR FR0
|
||
DA46 ZFR1 EQU $DA46 ; CLEAR FR1
|
||
DA60 FSUB EQU $DA60 ; FP SUBTRACT
|
||
DA66 FADD EQU $DA66 ; FP ADD
|
||
DADB FMUL EQU $DADB ; FP MULTIPLY
|
||
DB28 FDIV EQU $DB28 ; FP DIVIDE
|
||
DDB6 FMOVE EQU $DDB6 ; MOVE FR0 TO FR1
|
||
E453 DSKINV EQU $E453 ; SIO DISK ACCESS
|
||
E456 CIOV EQU $E456 ; CIO VECTOR
|
||
E465 SIOINV EQU $E465 ; SIO INIT (FOR SOUND)
|
||
E477 COLDSV EQU $E477 ; COLDSTART VECTOR
|
||
|
||
END
|
||
INCLUD COLD.ASM ; M
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 10
|
||
--- MACHINE COLDSTART: ATARI ---
|
||
|
||
|
||
0B00 ORG GRIP
|
||
|
||
0B00 ; -----------------
|
||
0B00 ; ATARI BOOT HEADER
|
||
0B00 ; -----------------
|
||
|
||
0B00 00 DB 0 ; FLAG BYTE (IGNORED)
|
||
0B01 35 DB 53 ; LOAD ALL OF TRACKS 0, 1 AND 2
|
||
0B02 000B DW GRIP ; WHERE TO LOAD THE SECTORS
|
||
0B04 0E0B DW DUMMY ; POINT TO INIT SUBROUTINE
|
||
|
||
0B06 ; --------------
|
||
0B06 ; BOOT COLDSTART
|
||
0B06 ; --------------
|
||
|
||
0B06 A9EB LDA #LOW COLD ; POINT [DOSVEC] TO
|
||
0B08 850A STA DOSVEC+LO ; THE COLDSTART ROUTINE
|
||
0B0A A90B LDA #HIGH COLD
|
||
0B0C 850B STA DOSVEC+HI
|
||
|
||
0B0E A9FF DUMMY: LDA #$FF ; DISABLE BASIC ROM
|
||
0B10 8D01D3 STA PORTB ; IN XL-SERIES MACHINES
|
||
0B13 18 CLC ; SUCCESS FLAG
|
||
0B14 60 RTS
|
||
|
||
0B15 ; -------------
|
||
0B15 ; DISPLAY LISTS
|
||
0B15 ; -------------
|
||
|
||
0B15 ; LIST 1: SCREEN W/STATUS LINE
|
||
|
||
0B15 707060 DL1: DB $70,$70,$60 ; 23 BLANK LINES
|
||
0B18 42 DB $42 ; TEXT LINE W/LMS
|
||
0B19 A003 DW TEXT ; ADDRESS OF TEXT LINE
|
||
0B1B 02 DB $02 ; A SECOND LINE OF TEXT
|
||
0B1C 01 DB $01 ; JUMP INSTRUCTION
|
||
0B1D 340B DW DL2A ; INTO DL2
|
||
|
||
0B1F ; LIST 2: SCREEN W/O STATUS LINE (NORMAL)
|
||
|
||
0B1F 707070 DL2: DB $70,$70,$70 ; 24 BLANK LINES
|
||
0B22 4F DB $4F ; 1 SCAN LINE W/LMS
|
||
0B23 00A1 DW SCREEN ; ADDRESS OF SCREEN RAM
|
||
0B25 0F0F0F0F DB $0F,$0F,$0F,$0F ; 7 MORE
|
||
0B29 0F0F0F DB $0F,$0F,$0F ; SCAN LINES (0)
|
||
0B2C 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (2)
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 11
|
||
--- MACHINE COLDSTART: ATARI ---
|
||
|
||
|
||
0B34 4F DL2A: DB $4F ; 1 SCAN LINE W/LMS
|
||
0B35 80A3 DW SCREEN+640 ; ADDRESS OF 8TH SCAN LINE
|
||
0B37 0F0F0F0F DB $0F,$0F,$0F,$0F ; 7 MORE
|
||
0B3B 0F0F0F DB $0F,$0F,$0F ; SCAN LINES (1)
|
||
|
||
0B3E 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (3)
|
||
0B46 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (4)
|
||
0B4E 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (5)
|
||
0B56 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (6)
|
||
0B5E 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (7)
|
||
0B66 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (8)
|
||
0B6E 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (9)
|
||
0B76 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (10)
|
||
0B7E 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (11)
|
||
|
||
0B86 4F DB $4F ; 1 SCAN LINE W/LMS
|
||
0B87 00B0 DW SCREEN+3840 ; ADDRESS OF 96TH SCAN LINE
|
||
0B89 0F0F0F0F DB $0F,$0F,$0F,$0F ; 7 MORE
|
||
0B8D 0F0F0F DB $0F,$0F,$0F ; SCAN LINES (12)
|
||
|
||
0B90 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (13)
|
||
0B98 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (14)
|
||
0BA0 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (15)
|
||
0BA8 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (16)
|
||
0BB0 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (17)
|
||
0BB8 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (18)
|
||
0BC0 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (19)
|
||
0BC8 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (20)
|
||
0BD0 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (21)
|
||
0BD8 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (22)
|
||
0BE0 0F0F0F0F DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; (23)
|
||
|
||
0BE8 41 DB $41 ; JUMP ON VERTICAL BLANK
|
||
0BE9 1F0B DLTOP: DW DL2 ; TO TOP OF D-LIST 2
|
||
|
||
0BEB ; ---------
|
||
0BEB ; COLDSTART
|
||
0BEB ; ---------
|
||
|
||
0BEB D8 COLD: CLD
|
||
0BEC A2FF LDX #$FF ; RESET THE
|
||
0BEE 9A TXS ; HARDWARE STACK
|
||
0BEF 8EFC02 STX CH ; AND KEYBOARD REGISTER
|
||
0BF2 8E01D3 STX PORTB ; REMOVE BASIC ROM IN XL-SERIES MACHINES
|
||
0BF5 E8 INX ; = 0
|
||
0BF6 8E00D4 STX DMACTL ; SHUT OFF
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 12
|
||
--- MACHINE COLDSTART: ATARI ---
|
||
|
||
0BF9 8E2F02 STX SDMCTL ; ANTIC
|
||
0BFC 8EC602 STX COLOR2 ; BLACK BACKGROUND
|
||
0BFF 8E4402 STX COLDST ; COLDSTART OKAY
|
||
0C02 8E08D2 STX AUDCTL ; CLEAR SOUND
|
||
0C05 8641 STX SOUNDR ; PREVENT I/O BEEPS
|
||
0C07 E8 INX ; = 1
|
||
0C08 8609 STX BOOT ; BOOT SUCCESSFUL
|
||
|
||
0C0A A903 LDA #3
|
||
0C0C 8D0FD2 STA SKCTL ; RESET SOUND
|
||
|
||
0C0F A970 LDA #$70
|
||
0C11 8510 STA POKMSK ; DISABLE
|
||
0C13 8D0ED2 STA IRQEN ; THE BREAK KEY
|
||
|
||
0C16 A90E LDA #14 ; WHITE
|
||
0C18 8DC502 STA COLOR1 ; GRAPHICS
|
||
|
||
0C1B ; SET UP THE PLOT TABLES
|
||
|
||
0C1B A900 LDA #LOW SCREEN ; ADDRESS OF SCAN LINE 0
|
||
0C1D 8D0009 STA VLOWS ; HARD-WIRE THE 1ST POSITION
|
||
0C20 857A STA I+LO ; ALSO INIT INDEX
|
||
|
||
0C22 A9A1 LDA #HIGH SCREEN ; SAME FOR MSBS
|
||
0C24 8DC009 STA VHIGHS
|
||
0C27 857B STA I+HI
|
||
|
||
0C29 A201 LDX #1 ; START AT LINE 1
|
||
0C2B A57A PTCALC: LDA I+LO
|
||
0C2D 18 CLC
|
||
0C2E 6928 ADC #40
|
||
0C30 857A STA I+LO
|
||
0C32 9D0009 STA VLOWS,X
|
||
0C35 A57B LDA I+HI
|
||
0C37 6900 ADC #0
|
||
0C39 857B STA I+HI
|
||
0C3B 9DC009 STA VHIGHS,X
|
||
0C3E E8 INX
|
||
0C3F E0C0 CPX #192
|
||
0C41 D0E8 BNE PTCALC
|
||
|
||
0C43 A97F LDA #$7F
|
||
0C45 856D STA ARG1+LO
|
||
0C47 856E STA ARG1+HI
|
||
0C49 201F1C JSR GCLEAR ; CLEAR SCREEN TO BLACK
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 13
|
||
--- MACHINE COLDSTART: ATARI ---
|
||
|
||
0C4C IF DEBUG
|
||
0C4C JSR BUGNIT ; SET UP DEBUGGER
|
||
0C4C ELSE
|
||
0C4C A91F LDA #LOW DL2 ; ELSE USE FULL-SCREEN
|
||
0C4E 8D3002 STA SDLSTL+LO
|
||
0C51 8DE90B STA DLTOP+LO
|
||
0C54 A90B LDA #HIGH DL2
|
||
0C56 8D3102 STA SDLSTL+HI
|
||
0C59 8DEA0B STA DLTOP+HI
|
||
0C5C ENDIF
|
||
|
||
0C5C A922 LDA #$22
|
||
0C5E 8D2F02 STA SDMCTL ; RESTORE ANTIC
|
||
|
||
0C61 ; FALL THROUGH TO WARMSTART ...
|
||
|
||
END
|
||
INCLUD WARM.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 14
|
||
--- WARMSTART ROUTINE ---
|
||
|
||
|
||
0C61 ; ---------
|
||
0C61 ; WARMSTART
|
||
0C61 ; ---------
|
||
|
||
0C61 A900 WARM: LDA #0 ; CLEAR ALL Z-PAGE VARIABLES
|
||
0C63 A26B LDX #ZSTART
|
||
0C65 9500 CLRZ: STA 0,X
|
||
0C67 E8 INX
|
||
; CPX #ZEND ; NOT NEEDED FOR ATARI
|
||
0C68 D0FB BNE CLRZ
|
||
|
||
0C6A ; CLEAR THE MEMORY, LRU & SWAPPING MAPS
|
||
|
||
0C6A AA TAX ; = 0
|
||
0C6B 9D0007 CLRT: STA MEMMAP,X
|
||
0C6E 9D0008 STA PAGMAP,X
|
||
0C71 E8 INX
|
||
0C72 D0F7 BNE CLRT
|
||
|
||
0C74 E68E INC GSP ; INIT G-STACK POINTERS
|
||
0C76 E68F INC OLDGSP ; TO 1
|
||
0C78 E698 INC STAMP ; 1ST TIMESTAMP IS 1
|
||
|
||
0C7A A928 LDA #40 ; SET DEFAULT CLIPPING PARAMETERS
|
||
0C7C 85CB STA WINDX2
|
||
0C7E 85CE STA WINDW ; DEFAULT WINDOW WIDTH
|
||
0C80 A918 LDA #24
|
||
0C82 85CC STA WINDY2
|
||
0C84 85CD STA WINDH ; DEFAULT WINDOW HEIGHT
|
||
|
||
0C86 ; FETCH 1ST BLOCK OF G-PRELOAD
|
||
|
||
0C86 A923 LDA #HIGH GBEGIN
|
||
0C88 8590 STA GCODE ; 1ST PAGE OF G-PRELOAD
|
||
0C8A 85EE STA DBUFF+HI ; LSB OF [DBUFF] IS ALWAYS ZERO
|
||
0C8C C694 DEC ISTART ; (= $FF) FORCE LOAD FROM G-FILE
|
||
0C8E 202722 JSR GETDSK ; GRAB G-BLOCK #0 (G-PRELOAD HEADER)
|
||
|
||
0C91 ; EXTRACT DATA FROM G-PRELOAD HEADER
|
||
|
||
0C91 AE0423 LDX GBEGIN+GEND ; END OF PRELOAD (MSB)
|
||
0C94 E8 INX ; MAKE IT AT LEAST 1
|
||
0C95 8693 STX GPURE ; 1ST VIRTUAL PAGE OF "PURE" G-CODE
|
||
|
||
0C97 8A TXA
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 15
|
||
--- WARMSTART ROUTINE ---
|
||
|
||
;***
|
||
0C98 0A ASL A ; * 2 FOR 512 BYTE PAGES
|
||
0C99 B012 BCS NOGRAM ; IT WOULD BE BAD IF CARRY WERE SET
|
||
;***
|
||
|
||
; CLC
|
||
|
||
0C9B 6590 ADC GCODE ; ABSOLUTE END OF G-PRELOAD
|
||
0C9D 8592 STA ICODE+HI ; IS ABSOLUTE START OF I-PRELOAD
|
||
|
||
0C9F A942 LDA #INTRP ; SET INTERPRETER VERSION
|
||
0CA1 8D1623 STA GBEGIN+IVERS ; FOR GAME
|
||
|
||
0CA4 20FD1C JSR MEMTOP ; GET TOP FREE PAGE INTO [A]
|
||
0CA7 C592 CMP ICODE+HI ; ENOUGH ROOM FOR G-PRELOAD?
|
||
0CA9 F002 BEQ NOGRAM
|
||
0CAB B005 BCS GETLEN ; ONLY IF [MEMTOP] >= [ICODE]
|
||
|
||
0CAD ; *** ERROR #0: GAME PRELOAD TOO BIG ***
|
||
|
||
0CAD A900 NOGRAM: LDA #0
|
||
0CAF 4C5F1C JMP GERROR
|
||
|
||
0CB2 ; CALC VIRTUAL ADDRESS OF I-FILE
|
||
|
||
0CB2 AE1223 GETLEN: LDX GBEGIN+GLEN ; MSB OF G-CODE LENGTH
|
||
0CB5 E8 INX
|
||
0CB6 8694 STX ISTART ; 1ST VIRTUAL PAGE OF I-FILE
|
||
|
||
0CB8 ; FETCH THE REST OF THE G-PRELOAD
|
||
|
||
0CB8 A5EB GPGET: LDA DBLOCK
|
||
0CBA C593 CMP GPURE
|
||
0CBC B006 BCS IHEAD
|
||
0CBE 202722 JSR GETDSK
|
||
0CC1 4CB80C JMP GPGET
|
||
|
||
0CC4 ; NOW GET THE I-FILE HEADER
|
||
|
||
0CC4 A594 IHEAD: LDA ISTART ; POINT TO 1ST BLOCK
|
||
0CC6 85EB STA DBLOCK ; OF IMAGE FILE
|
||
0CC8 A592 LDA ICODE+HI ; TELL GROS
|
||
0CCA 85EE STA DBUFF+HI ; WHERE TO PUT IT
|
||
0CCC 202722 JSR GETDSK ; AND GET IT!
|
||
|
||
0CCF ; EXTRACT DATA FROM I-FILE HEADER
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 16
|
||
--- WARMSTART ROUTINE ---
|
||
|
||
0CCF A002 LDY #IEND ; "END OF I-PRELOAD" POINTER (MSB)
|
||
0CD1 B191 LDA (ICODE),Y
|
||
0CD3 AA TAX ; COPY IT HERE
|
||
0CD4 E8 INX ; POINT TO NEXT PAGE
|
||
|
||
0CD5 8A TXA
|
||
0CD6 18 CLC
|
||
0CD7 6594 ADC ISTART ; ADD 1ST V-PAGE OF I-FILE
|
||
0CD9 8595 STA IPURE ; TO GET V-PAGE OF "PURE" I-CODE
|
||
|
||
0CDB 8A TXA
|
||
|
||
;***
|
||
0CDC 0A ASL A ; * 2 FOR 512 BYTE PAGES
|
||
0CDD B00E BCS ITOBIG ; AGAIN IT WOULD BE BAD IF CARRY WERE SET
|
||
;***
|
||
|
||
; CLC
|
||
|
||
0CDF 6592 ADC ICODE+HI ; ADD BASE ADDR OF I-PRELOAD
|
||
0CE1 8596 STA PAGE0 ; TO GET BASE PAGE OF SWAPPING SPACE
|
||
|
||
0CE3 20FD1C JSR MEMTOP ; GET TOP FREE PAGE INTO [A] AGAIN
|
||
0CE6 38 SEC
|
||
0CE7 E596 SBC PAGE0 ; CALC # PAGES IN SWAPPING SPACE
|
||
0CE9 C910 CMP #16 ; MUST HAVE AT LEAST 2K
|
||
0CEB B005 BCS ENOUGH ; OF SWAPPING SPACE
|
||
|
||
0CED ; *** ERROR #1: IMAGE PRELOAD TOO BIG ***
|
||
|
||
0CED A901 ITOBIG: LDA #1
|
||
0CEF 4C5F1C JMP GERROR
|
||
|
||
0CF2 AA ENOUGH: TAX ; CHECK SIZE OF PAGING SPACE
|
||
0CF3 1002 BPL NOUGH ; MUST BE NO LARGER
|
||
0CF5 A97E LDA #$7E ; THAN 32K!
|
||
|
||
;***
|
||
0CF7 4A NOUGH: LSR A ; DIVIDE !RAM! PAGES/2 TO GET #/BUFFERS
|
||
|
||
0CF8 ****
|
||
|
||
0CF8 8597 STA PMAX ; ESTABLISH # SWAPPING PAGES
|
||
|
||
0CFA ; GRAB THE REST OF THE I-PRELOAD
|
||
|
||
0CFA A5EB GETIP: LDA DBLOCK
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 17
|
||
--- WARMSTART ROUTINE ---
|
||
|
||
0CFC C595 CMP IPURE
|
||
0CFE B006 BCS GCALC
|
||
0D00 202722 JSR GETDSK
|
||
0D03 4CFA0C JMP GETIP
|
||
|
||
0D06 ; CALC ADDRESS OF GLOBAL VARIABLE TABLE
|
||
|
||
;GCALC: LDA GBEGIN+GGLOB ; MSB OF GLOBAL VARS
|
||
; CLC
|
||
; ADC GCODE ; MAKE IT ABSOLUTE
|
||
; STA GLOBAL+HI
|
||
; LDA GBEGIN+GGLOB+1 ; LSB NEEDN'T CHANGE
|
||
; STA GLOBAL+LO
|
||
|
||
;***
|
||
|
||
0D06 ;-----------------------------------------------------------
|
||
0D06 ; [GGLOB] IS A VIRTUAL WORD POINTER TO THE GLOBAL TABLE
|
||
0D06 ; MAKE [GLOBAL] A !RAM! ABSOLUTE POINTER TO THE GLOBAL TABLE
|
||
0D06 ;
|
||
0D06 ; WE MULTIPLY [GGLOB]*2 TO MAKE IT A BYTE POINTER AND ADD
|
||
0D06 ; TO THE BEGINING ADDRESS OF PRELOAD.
|
||
0D06 ;------------------------------------------------------------
|
||
0D06 AD0B23 GCALC: LDA GBEGIN+GGLOB+1 ; MAKE IT A BYTE POINTER WITH A * 2
|
||
0D09 0A ASL A
|
||
0D0A 859C STA GLOBAL+LO
|
||
0D0C AD0A23 LDA GBEGIN+GGLOB
|
||
0D0F 2A ROL A
|
||
0D10 18 CLC ; I THINK THE CARRY WOULD BE CLEAR ANYWAY
|
||
0D11 6590 ADC GCODE
|
||
0D13 859D STA GLOBAL+HI
|
||
;***
|
||
|
||
|
||
0D15 ; G-VAR #16 = # BLOCKSETS IN I-FILE
|
||
|
||
0D15 A006 LDY #IBLKS ; GET # BLOCKSETS IN I-FILE
|
||
0D17 B191 LDA (ICODE),Y
|
||
0D19 85A2 STA NBLOKS ; SAVE HERE
|
||
|
||
0D1B 8578 STA VALUE+LO ; MSB IS ALREADY CLEARED
|
||
0D1D A910 LDA #16
|
||
0D1F 207F0F JSR PUTVLG
|
||
|
||
0D22 ; G-VAR #18 = # ICONS IN I-FILE
|
||
|
||
0D22 A007 LDY #IICONS ; GET # ICONS IN I-FILE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 18
|
||
--- WARMSTART ROUTINE ---
|
||
|
||
0D24 B191 LDA (ICODE),Y ; FROM THE I-FILE HEADER
|
||
0D26 85A3 STA NICONS ; SAVE HERE
|
||
|
||
0D28 8578 STA VALUE+LO ; MSB ALREADY CLEARED
|
||
0D2A A912 LDA #18
|
||
0D2C 207F0F JSR PUTVLG
|
||
|
||
0D2F ; [BTAB] = ABSOLUTE BLOCKSET TABLE ADDR
|
||
|
||
0D2F A592 LDA ICODE+HI ; BLOCKSET TABLE BEGINS
|
||
0D31 859F STA BTAB+HI ; 8 BYTES AFTER THE START
|
||
0D33 A908 LDA #8 ; OF THE I-FILE
|
||
0D35 859E STA BTAB+LO
|
||
|
||
0D37 ; G-VAR #17 = V-WORD OF BLOCKSET TABLE
|
||
;***
|
||
0D37 4A LSR A ; /2 FOR 4-WORD OFFSET
|
||
;***
|
||
|
||
0D38 8578 STA VALUE+LO ; SAME 8-BYTE OFFSET AS [BTAB]
|
||
0D3A A594 LDA ISTART ; 1ST VIRTUAL PAGE # OF I-FILE
|
||
0D3C 8579 STA VALUE+HI
|
||
0D3E A911 LDA #17
|
||
0D40 207F0F JSR PUTVLG
|
||
|
||
0D43 ; G-VAR #19 = VIRTUAL WORD ADDRESS OF ICON TABLE
|
||
|
||
0D43 A5A2 LDA NBLOKS ; GET # BLOCKS IN I-FILE
|
||
|
||
; ASL A ; WORD-ALIGN IT
|
||
; ROL MTEMP+HI ; TO GET SIZE OF BLOCKSET TABLE
|
||
; STA MTEMP+LO ; SAVE LSB OF SIZE
|
||
|
||
0D45 18 CLC ; ADD THE V-WORD ADDR OF THE B-TABLE
|
||
0D46 6578 ADC VALUE+LO ; TO GET V-WORD ADDR OF I-TABLE
|
||
0D48 8578 STA VALUE+LO ; INTO [VALUE]
|
||
|
||
; LDA MTEMP+HI
|
||
;***
|
||
0D4A A900 LDA #00
|
||
;***
|
||
|
||
0D4C 6579 ADC VALUE+HI
|
||
0D4E 8579 STA VALUE+HI
|
||
|
||
0D50 A913 LDA #19
|
||
0D52 207F0F JSR PUTVLG
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 19
|
||
--- WARMSTART ROUTINE ---
|
||
|
||
|
||
0D55 ; PREPARE FOR TABLE PATCHING
|
||
|
||
;***
|
||
0D55 A5A2 LDA NBLOKS ; * 2 FOR LENGTH IN BYTES INSTED OF WORDS
|
||
0D57 0A ASL A
|
||
0D58 85A8 STA MTEMP+LO
|
||
0D5A 26A9 ROL MTEMP+HI
|
||
;***
|
||
|
||
|
||
0D5C A59E LDA BTAB+LO ; MAKE [I] POINT TO
|
||
0D5E 857A STA I+LO ; START OF B-TABLE
|
||
0D60 18 CLC ; WHILE WE'RE AT IT,
|
||
0D61 65A8 ADC MTEMP+LO ; ADD SIZE OF B-TABLE
|
||
0D63 85A0 STA ITAB+LO ; TO GET ABS START ADDR OF I-TABLE
|
||
0D65 857C STA J+LO ; INTO [ITAB] AND [J]
|
||
|
||
0D67 A59F LDA BTAB+HI ; DON'T FORGET MSBS!
|
||
0D69 857B STA I+HI
|
||
0D6B 65A9 ADC MTEMP+HI
|
||
0D6D 85A1 STA ITAB+HI
|
||
0D6F 857D STA J+HI
|
||
|
||
0D71 ; PATCH THE BLOCKSET TABLE
|
||
;***
|
||
0D71 ;SHOULD WORK AS IS
|
||
;***
|
||
|
||
0D71 A5A2 LDA NBLOKS ; GET # BLOCKSETS
|
||
0D73 85AA STA QSIGN ; SAVE HERE FOR INDEXING
|
||
0D75 A000 LDY #0 ; [I] HAS START OF B-TABLE
|
||
0D77 B17A PATB: LDA (I),Y ; GET MSB OF A B-POINTER
|
||
0D79 18 CLC
|
||
0D7A 6594 ADC ISTART ; ADD ITS VIRTUAL OFFSET
|
||
0D7C 917A STA (I),Y
|
||
|
||
0D7E C8 INY ; NO NEED TO TOUCH LSB
|
||
0D7F C8 INY ; SO SKIP OVER IT
|
||
0D80 D002 BNE PATB1 ; CONTINUE UNTIL PAGE BOUNDARY HIT
|
||
0D82 E67B INC I+HI ; IF HIT, POINT TO NEXT PAGE
|
||
|
||
0D84 C6AA PATB1: DEC QSIGN ; DECREMENT # BLOCKSETS
|
||
0D86 D0EF BNE PATB ; KEEP PATCHING TILL NONE LEFT
|
||
|
||
0D88 ; PATCH THE ICON TABLE
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 20
|
||
--- WARMSTART ROUTINE ---
|
||
|
||
0D88 A5A3 LDA NICONS ; GET # ICONS
|
||
0D8A 85AA STA QSIGN ; FOR INDEXING
|
||
0D8C A000 LDY #0 ; [J] HAS START OF I-TABLE
|
||
0D8E B17C PATI: LDA (J),Y ; GET MSB OF I-POINTER
|
||
0D90 18 CLC
|
||
0D91 6594 ADC ISTART ; ADD ITS VIRTUAL OFFSET
|
||
0D93 917C STA (J),Y
|
||
|
||
0D95 C8 INY ; SKIP OVER LSB
|
||
0D96 C8 INY
|
||
0D97 D002 BNE PATI1
|
||
0D99 E67D INC J+HI
|
||
|
||
0D9B C6AA PATI1: DEC QSIGN ; DECREMENT # ICONS
|
||
0D9D D0EF BNE PATI ; KEEP PATCHING TILL NONE LEFT
|
||
|
||
0D9F ; INIT THE VIRTUAL MEMORY MAP
|
||
|
||
0D9F A200 LDX #0 ; 1ST VIRTUAL PAGE
|
||
0DA1 A490 LDY GCODE ; 1ST ABSOLUTE PAGE OF G-PRELOAD
|
||
0DA3 98 MINIT0: TYA
|
||
0DA4 9D0007 STA MEMMAP,X
|
||
0DA7 C8 INY ; NEXT ABSOLUTE PAGE
|
||
;***
|
||
0DA8 C8 INY ; SKIP 2 RAM PAGES FOR EVERY VIRTUAL PAGE
|
||
;***
|
||
0DA9 E8 INX ; NEXT VIRTUAL PAGE
|
||
0DAA E493 CPX GPURE ; END OF PRELOAD?
|
||
0DAC 90F5 BCC MINIT0 ; NO, KEEP FILLING
|
||
|
||
0DAE A694 LDX ISTART ; 1ST VIRTUAL PAGE OF I-CODE
|
||
0DB0 A492 LDY ICODE+HI ; 1ST ABSOLUTE PAGE OF I-PRELOAD
|
||
0DB2 98 MINIT1: TYA
|
||
0DB3 9D0007 STA MEMMAP,X
|
||
0DB6 C8 INY ; NEXT ABSOLUTE PAGE
|
||
;***
|
||
0DB7 C8 INY ; SKIP 2 RAM FOR EVERY 1 VIRTUAL
|
||
;***
|
||
0DB8 E8 INX ; NEXT VIRTUAL PAGE
|
||
0DB9 E495 CPX IPURE ; END OF I-PRELOAD?
|
||
0DBB 90F5 BCC MINIT1
|
||
|
||
0DBD ; ESTABLISH START ADDRESS OF G-PROGRAM
|
||
|
||
0DBD AD0623 LDA GBEGIN+GSTART ; MSB
|
||
0DC0 8581 STA GPCH
|
||
0DC2 AD0723 LDA GBEGIN+GSTART+1 ; LSB
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- INITIALIZATION PAGE 21
|
||
--- WARMSTART ROUTINE ---
|
||
|
||
0DC5 8580 STA GPCL
|
||
|
||
;***
|
||
0DC7 A901 LDA #$01 ; START OF GAME IS ALWAYS ON THE ODD BYTE
|
||
0DC9 8582 STA GPC0 ; OF THE [GSTART] WORD
|
||
0DCB A900 LDA #$00
|
||
0DCD 8583 STA GPCFLG
|
||
;***
|
||
|
||
0DCF ; FALL THROUGH TO MAIN LOOP ...
|
||
|
||
END
|
||
|
||
INCLUD MAIN.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- MAIN LOOP PAGE 22
|
||
--- MAIN LOOP ---
|
||
|
||
|
||
0DCF A2FF MLOOP: LDX #$FF ; RESET THE
|
||
0DD1 9A TXS ; HARDWARE STACK
|
||
0DD2 E8 INX ; = 0
|
||
0DD3 866C STX NARGS ; CLEAR # ARGS
|
||
0DD5 20D21A JSR NEXTPC ; GET Z-BYTE INTO [A]
|
||
0DD8 856B STA OPCODE ; FLAGS ARE SET
|
||
|
||
0DDA IF DEBUG
|
||
0DDA LDA #0 ; BREAKPOINT #0
|
||
0DDA JSR DOBUG
|
||
0DDA LDA OPCODE
|
||
0DDA ENDIF
|
||
|
||
0DDA ; DECODE AN OPCODE
|
||
|
||
0DDA AA TAX ; SET FLAGS
|
||
0DDB 3003 BMI DC0 ; IF POSITIVE,
|
||
0DDD 4CA20E JMP OP2 ; IT'S A 2-OP
|
||
|
||
0DE0 C9E0 DC0: CMP #$E0 ; IS IT "CALL"?
|
||
0DE2 D003 BNE DC1
|
||
0DE4 4CF712 JMP GCALL
|
||
|
||
0DE7 C9B0 DC1: CMP #$B0
|
||
0DE9 B003 BCS DC2
|
||
0DEB 4C730E JMP OP1 ; OR MAYBE A 1-OP
|
||
|
||
0DEE C9C0 DC2: CMP #$C0
|
||
0DF0 B003 BCS OPEXT
|
||
0DF2 4C640E JMP OP0 ; PERHAPS A 0-OP
|
||
|
||
0DF5 ; --------------
|
||
0DF5 ; HANDLE AN X-OP
|
||
0DF5 ; --------------
|
||
|
||
0DF5 20D21A OPEXT: JSR NEXTPC ; GRAB ARGUMENT BYTE
|
||
0DF8 8575 STA ABYTE ; HOLD IT HERE
|
||
|
||
0DFA A200 LDX #0
|
||
0DFC 8676 STX ADEX ; INIT LOOP INDEX
|
||
0DFE F006 BEQ OPX1 ; JUMP INTO LOOP
|
||
|
||
0E00 A575 TOPX: LDA ABYTE ; GET ARG BYTE
|
||
0E02 0A ASL A ; SHIFT NEXT 2 ARG BITS
|
||
0E03 0A ASL A ; INTO BITS 7 & 6
|
||
0E04 8575 STA ABYTE ; HOLD FOR LATER
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- MAIN LOOP PAGE 23
|
||
--- MAIN LOOP ---
|
||
|
||
|
||
0E06 29C0 OPX1: AND #%11000000 ; MASK OUT GARBAGE BITS
|
||
0E08 D006 BNE OPX2
|
||
0E0A 20EE0E JSR GETLNG ; 00 = LONG IMMEDIATE
|
||
0E0D 4C210E JMP OPXNXT
|
||
|
||
0E10 C940 OPX2: CMP #%01000000 ; IS IT A SHORT IMMEDIATE?
|
||
0E12 D006 BNE OPX3 ; NO, KEEP GUESSING
|
||
0E14 20EA0E JSR GETSHT ; 01 = SHORT IMMEDIATE
|
||
0E17 4C210E JMP OPXNXT
|
||
|
||
0E1A C980 OPX3: CMP #%10000000 ; LAST TEST
|
||
0E1C D017 BNE OPX4 ; 11 = NO MORE ARGUMENTS
|
||
0E1E 20020F JSR GETVAR ; 10 = VARIABLE
|
||
|
||
0E21 A676 OPXNXT: LDX ADEX ; ARGUMENT INDEX
|
||
0E23 A578 LDA VALUE+LO ; GRAB LSB OF VALUE
|
||
0E25 956D STA ARG1+LO,X ; STORE IN ARGUMENT TABLE
|
||
0E27 A579 LDA VALUE+HI ; GRAB MSB OF VALUE
|
||
0E29 956E STA ARG1+HI,X ; STORE THAT, TOO
|
||
|
||
0E2B E66C INC NARGS ; UPDATE ARGUMENT COUNTER
|
||
|
||
0E2D E8 INX
|
||
0E2E E8 INX
|
||
0E2F 8676 STX ADEX ; UPDATE INDEX
|
||
0E31 E008 CPX #8 ; DONE 4 ARGUMENTS YET?
|
||
0E33 90CB BCC TOPX ; NO, GET SOME MORE
|
||
|
||
0E35 ; ALL X-OP ARGUMENTS READY
|
||
|
||
0E35 A56B OPX4: LDA OPCODE ; IS THIS
|
||
0E37 C9E0 CMP #$E0 ; AN EXTENDED 2-OP?
|
||
0E39 B003 BCS DOXOP ; NO, IT'S A REAL X-OP
|
||
0E3B 4CCB0E JMP OP2EX ; ELSE TREAT IT LIKE A 2-OP
|
||
|
||
0E3E A261 DOXOP: LDX #LOW OPTX ; GET ADDR OF X-OP TABLE
|
||
0E40 A010 LDY #HIGH OPTX ; INTO [X/Y]
|
||
0E42 291F AND #%00011111 ; ISOLATE OP ID BITS
|
||
0E44 C911 CMP #NOPSX ; IS IT A LEGAL X-OP?
|
||
0E46 9005 BCC DODIS ; YUP; TIME TO DISPATCH IT
|
||
|
||
0E48 ; *** ERROR #2: UNDEFINED X-OP ***
|
||
|
||
0E48 A902 LDA #2
|
||
0E4A 4C5F1C JMP GERROR
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- MAIN LOOP PAGE 24
|
||
--- MAIN LOOP ---
|
||
|
||
0E4D ; ---------------
|
||
0E4D ; OPCODE DISPATCH
|
||
0E4D ; ---------------
|
||
|
||
0E4D ; ENTRY: MASKED OPCODE INDEX IN [A]
|
||
0E4D ; OP-TABLE ADDR IN X/Y (LSB/MSB)
|
||
|
||
0E4D 867A DODIS: STX I+LO ; SAVE TABLE ADDRESS
|
||
0E4F 847B STY I+HI ; IN A POINTER
|
||
|
||
0E51 0A ASL A ; WORD-ALIGN THE OP INDEX
|
||
0E52 A8 TAY
|
||
0E53 B17A LDA (I),Y ; GET LSB OF DISPATCH ADDRESS
|
||
0E55 8D5F0E STA GO+LO ; INSTALL AS JSR OPERAND
|
||
0E58 C8 INY
|
||
0E59 B17A LDA (I),Y ; SAME WITH MSB
|
||
0E5B 8D600E STA GO+HI
|
||
|
||
0E5E 20 DB $20 ; 6502 "JSR" OPCODE
|
||
0E5F 0000 GO: DW $0000 ; DUMMY OPERAND BYTES
|
||
|
||
0E61 4CCF0D JMP MLOOP ; GO BACK FOR ANOTHER OPCODE
|
||
|
||
0E64 ; -------------
|
||
0E64 ; HANDLE A 0-OP
|
||
0E64 ; -------------
|
||
|
||
0E64 A21B OP0: LDX #LOW OPT0 ; GET ADDR OF 0-OP TABLE
|
||
0E66 A010 LDY #HIGH OPT0 ; INTO [X/Y]
|
||
0E68 290F AND #%00001111 ; ISOLATE OP ID BITS
|
||
0E6A C908 CMP #NOPS0 ; OUT OF RANGE?
|
||
0E6C 90DF BCC DODIS ; NO, DISPATCH
|
||
|
||
0E6E ; *** ERROR #3: UNDEFINED 0-OP ***
|
||
|
||
0E6E A903 LDA #3
|
||
0E70 4C5F1C JMP GERROR
|
||
|
||
0E73 ; -------------
|
||
0E73 ; HANDLE A 1-OP
|
||
0E73 ; -------------
|
||
|
||
0E73 2930 OP1: AND #%00110000 ; ISOLATE ARGUMENT BITS
|
||
0E75 D006 BNE OP1A
|
||
0E77 20EE0E JSR GETLNG ; 00 = LONG IMMEDIATE
|
||
0E7A 4C8E0E JMP OP1EX
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- MAIN LOOP PAGE 25
|
||
--- MAIN LOOP ---
|
||
|
||
0E7D C910 OP1A: CMP #%00010000 ; TEST AGAIN
|
||
0E7F D006 BNE OP1B
|
||
0E81 20EA0E JSR GETSHT ; 01 = SHORT IMMEDIATE
|
||
0E84 4C8E0E JMP OP1EX
|
||
|
||
0E87 C920 OP1B: CMP #%00100000 ; ONE MORE TEST
|
||
0E89 D012 BNE BADOP1 ; UNDEFINED STATE!
|
||
0E8B 20020F JSR GETVAR ; 10 = VARIABLE
|
||
|
||
0E8E 20DF0E OP1EX: JSR V2A1 ; VALUE TO [ARG1], UPDATE COUNT
|
||
0E91 A22B LDX #LOW OPT1 ; LSB OF DISPATCH TABLE
|
||
0E93 A010 LDY #HIGH OPT1 ; MSB
|
||
0E95 A56B LDA OPCODE ; RESTORE OPCODE
|
||
0E97 290F AND #%00001111 ; ISOLATE OP ID BITS
|
||
0E99 C909 CMP #NOPS1 ; IF WITHIN RANGE,
|
||
0E9B 90B0 BCC DODIS ; EXECUTE THE 1-OP
|
||
|
||
0E9D ; *** ERROR #4: UNDEFINED 1-OP ***
|
||
|
||
0E9D A904 BADOP1: LDA #4
|
||
0E9F 4C5F1C JMP GERROR
|
||
|
||
0EA2 ; -------------
|
||
0EA2 ; HANDLE A 2-OP
|
||
0EA2 ; -------------
|
||
|
||
0EA2 2940 OP2: AND #%01000000 ; ISOLATE 1ST ARG BIT
|
||
0EA4 D006 BNE OP2A
|
||
0EA6 20EA0E JSR GETSHT ; 0 = SHORT IMMEDIATE
|
||
0EA9 4CAF0E JMP OP2B
|
||
0EAC 20020F OP2A: JSR GETVAR ; 1 = VARIABLE
|
||
0EAF 20DF0E OP2B: JSR V2A1 ; VALUE TO [ARG1], UPDATE COUNT
|
||
|
||
0EB2 A56B LDA OPCODE ; RESTORE OPCODE BYTE
|
||
0EB4 2920 AND #%00100000 ; ISOLATE 2ND ARG BIT
|
||
0EB6 D006 BNE OP2C
|
||
0EB8 20EA0E JSR GETSHT ; 0 = SHORT IMMEDIATE
|
||
0EBB 4CC10E JMP OP2D
|
||
0EBE 20020F OP2C: JSR GETVAR ; 1 = VARIABLE
|
||
0EC1 A578 OP2D: LDA VALUE+LO ; MOVE VALUE TO [ARG2]
|
||
0EC3 856F STA ARG2+LO
|
||
0EC5 A579 LDA VALUE+HI
|
||
0EC7 8570 STA ARG2+HI
|
||
0EC9 E66C INC NARGS ; UPDATE COUNT
|
||
|
||
0ECB ; ENTRY FOR EXTENDED 2-OPS
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- MAIN LOOP PAGE 26
|
||
--- MAIN LOOP ---
|
||
|
||
0ECB A23D OP2EX: LDX #LOW OPT2 ; LSB OF DISPATCH TABLE
|
||
0ECD A010 LDY #HIGH OPT2 ; MSB
|
||
0ECF A56B LDA OPCODE ; RESTORE OPCODE BYTE
|
||
0ED1 291F AND #%00011111 ; ISOLATE OP ID BITS
|
||
0ED3 C912 CMP #NOPS2
|
||
0ED5 B003 BCS BADOP2 ; ERROR IF OUT OF RANGE
|
||
0ED7 4C4D0E JMP DODIS ; ELSE DISPATCH
|
||
|
||
0EDA ; *** ERROR #5: UNDEFINED 2-OP ****
|
||
|
||
0EDA A905 BADOP2: LDA #5
|
||
0EDC 4C5F1C JMP GERROR
|
||
|
||
0EDF ; --------------------------------------
|
||
0EDF ; MOVE [VALUE] TO [ARG1], UPDATE [NARGS]
|
||
0EDF ; --------------------------------------
|
||
|
||
0EDF A578 V2A1: LDA VALUE+LO
|
||
0EE1 856D STA ARG1+LO
|
||
0EE3 A579 LDA VALUE+HI
|
||
0EE5 856E STA ARG1+HI
|
||
0EE7 E66C INC NARGS
|
||
0EE9 60 RTS
|
||
|
||
END
|
||
INCLUD SUBS.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- MAIN LOOP PAGE 27
|
||
--- OPCODE SUPPORT SUBROUTINES ---
|
||
|
||
|
||
0EEA ; -----------------------
|
||
0EEA ; FETCH A SHORT IMMEDIATE
|
||
0EEA ; -----------------------
|
||
|
||
0EEA A900 GETSHT: LDA #0 ; CLEAR MSB OF [VALUE]
|
||
0EEC F003 BEQ GLG ; AND GRAB LSB
|
||
|
||
0EEE ; ----------------------
|
||
0EEE ; FETCH A LONG IMMEDIATE
|
||
0EEE ; ----------------------
|
||
|
||
0EEE 20D21A GETLNG: JSR NEXTPC ; GRAB MSB
|
||
|
||
0EF1 8579 GLG: STA VALUE+HI ; STORE IT
|
||
0EF3 20D21A JSR NEXTPC ; GRAB LSB
|
||
0EF6 8578 STA VALUE+LO ; STORE THAT TOO
|
||
0EF8 60 RTS
|
||
|
||
0EF9 ; ----------------
|
||
0EF9 ; FETCH A VARIABLE
|
||
0EF9 ; ----------------
|
||
|
||
0EF9 ; FROM WITHIN AN OPCODE (VARIABLE ID IN [A])
|
||
|
||
0EF9 AA VARGET: TAX ; IF NON-ZERO,
|
||
0EFA D00B BNE GETVR1 ; ACCESS A VARIABLE
|
||
|
||
0EFC 20280F JSR POPVAL ; ELSE PULL VAR OFF Z-STACK
|
||
0EFF 4C3E0F JMP PSHVAL ; WITHOUT ALTERING STACK
|
||
|
||
0F02 ; FROM THE MAIN LOOP (ID BYTE IN Z-CODE)
|
||
|
||
0F02 20D21A GETVAR: JSR NEXTPC ; GRAB VAR-TYPE BYTE
|
||
0F05 F021 BEQ POPVAL ; VALUE IS ON Z-STACK
|
||
|
||
0F07 ; IS VARIABLE LOCAL OR GLOBAL?
|
||
|
||
0F07 C910 GETVR1: CMP #$10 ; IF >= 16,
|
||
0F09 B010 BCS GETVRG ; IT'S GLOBAL
|
||
|
||
0F0B ; HANDLE A LOCAL VARIABLE
|
||
|
||
0F0B 38 GETVRL: SEC
|
||
0F0C E901 SBC #1 ; FORM A ZERO-ALIGNED
|
||
0F0E 0A ASL A ; WORD INDEX
|
||
0F0F AA TAX ; INTO THE [LOCALS]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- MAIN LOOP PAGE 28
|
||
--- OPCODE SUPPORT SUBROUTINES ---
|
||
|
||
|
||
0F10 BD800A LDA LOCALS+LO,X ; GRAB LSB
|
||
0F13 8578 STA VALUE+LO
|
||
0F15 BD810A LDA LOCALS+HI,X ; AND MSB
|
||
0F18 8579 STA VALUE+HI
|
||
0F1A 60 RTS
|
||
|
||
0F1B ; HANDLE A GLOBAL VARIABLE
|
||
|
||
0F1B 208C0F GETVRG: JSR GVCALC ; GET ADDRESS OF GLOBAL INTO [I]
|
||
0F1E B17A LDA (I),Y ; MSB OF GLOBAL ([Y] = 0)
|
||
0F20 8579 STA VALUE+HI
|
||
0F22 C8 INY ; = 1
|
||
0F23 B17A LDA (I),Y ; LSB OF GLOBAL
|
||
0F25 8578 STA VALUE+LO ; SAVE IT
|
||
0F27 60 RTS ; AND WE'RE DONE
|
||
|
||
0F28 ; ----------------------------------
|
||
0F28 ; POP G-STACK INTO [VALUE] AND [X/A]
|
||
0F28 ; ----------------------------------
|
||
|
||
0F28 C68E POPVAL: DEC GSP
|
||
0F2A F00D BEQ UNDER ; UNDERFLOW IF ZERO!
|
||
|
||
0F2C A48E LDY GSP ; READ STACK POINTER
|
||
0F2E BE0005 LDX GSTAKL,Y ; GRAB LSB OF STACK VALUE
|
||
0F31 8678 STX VALUE+LO ; GIVE TO [VALUE]
|
||
0F33 B90006 LDA GSTAKH,Y ; ALSO GRAB MSB
|
||
0F36 8579 STA VALUE+HI ; A SIMILAR FATE
|
||
0F38 60 RTS
|
||
|
||
0F39 ; *** ERROR #6: G-STACK UNDERFLOW ***
|
||
|
||
0F39 A906 UNDER: LDA #6
|
||
0F3B 4C5F1C JMP GERROR
|
||
|
||
0F3E ; -----------------------
|
||
0F3E ; PUSH [VALUE] TO G-STACK
|
||
0F3E ; -----------------------
|
||
|
||
0F3E A678 PSHVAL: LDX VALUE+LO
|
||
0F40 A579 LDA VALUE+HI
|
||
|
||
0F42 ; FALL THROUGH ...
|
||
|
||
0F42 ; ---------------------
|
||
0F42 ; PUSH [X/A] TO G-STACK
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- MAIN LOOP PAGE 29
|
||
--- OPCODE SUPPORT SUBROUTINES ---
|
||
|
||
0F42 ; ---------------------
|
||
|
||
0F42 A48E PSHXA: LDY GSP
|
||
0F44 990006 STA GSTAKH,Y
|
||
0F47 8A TXA
|
||
0F48 990005 STA GSTAKL,Y
|
||
|
||
0F4B E68E INC GSP
|
||
0F4D F001 BEQ OVER ; OVERFLOW IF ZEROED!
|
||
0F4F 60 RTS
|
||
|
||
0F50 ; *** ERROR #7: G-STACK OVERFLOW ***
|
||
|
||
0F50 A907 OVER: LDA #7
|
||
0F52 4C5F1C JMP GERROR
|
||
|
||
0F55 ; --------------
|
||
0F55 ; RETURN A VALUE
|
||
0F55 ; --------------
|
||
|
||
0F55 ; FROM WITHIN AN OPCODE (VARIABLE ID IN [A])
|
||
|
||
0F55 AA VARPUT: TAX ; IF ZERO,
|
||
0F56 D013 BNE PUTVR1
|
||
|
||
0F58 C68E DEC GSP ; FLUSH TOP WORD OFF STACK
|
||
0F5A D0E2 BNE PSHVAL ; AND REPLACE WITH [VALUE]
|
||
0F5C F0DB BEQ UNDER ; ERROR IF ZSP BECAME ZERO!
|
||
|
||
0F5E ; RETURN A ZERO
|
||
|
||
0F5E A900 RET0: LDA #0
|
||
|
||
0F60 ; RETURN BYTE IN [A]
|
||
|
||
0F60 8578 PUTBYT: STA VALUE+LO
|
||
0F62 A900 LDA #0
|
||
0F64 8579 STA VALUE+HI ; CLEAR MSB
|
||
|
||
0F66 ; RETURN [VALUE]; VARIABLE ID IN NEXT Z-BYTE
|
||
|
||
0F66 20D21A PUTVAL: JSR NEXTPC ; GET VAR-TYPE BYTE
|
||
0F69 F0D3 BEQ PSHVAL ; VALUE GOES TO STACK IF ZERO
|
||
|
||
0F6B ; LOCAL OR GLOBAL VARIABLE?
|
||
|
||
0F6B C910 PUTVR1: CMP #$10 ; IF >= 16,
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- MAIN LOOP PAGE 30
|
||
--- OPCODE SUPPORT SUBROUTINES ---
|
||
|
||
0F6D B010 BCS PUTVLG ; IT'S GLOBAL
|
||
|
||
0F6F ; PUT A LOCAL VARIABLE
|
||
|
||
0F6F 38 PUTVLL: SEC
|
||
0F70 E901 SBC #1 ; FORM A ZERO-ALIGNED
|
||
0F72 0A ASL A ; WORD INDEX
|
||
0F73 AA TAX ; INTO [LOCALS]
|
||
|
||
0F74 A578 LDA VALUE+LO ; GRAB LSB
|
||
0F76 9D800A STA LOCALS+LO,X ; SAVE IN LOCAL TABLE
|
||
0F79 A579 LDA VALUE+HI ; DO SAME TO
|
||
0F7B 9D810A STA LOCALS+HI,X ; MSB
|
||
0F7E 60 RTS
|
||
|
||
0F7F ; PUT A GLOBAL VARIABLE
|
||
|
||
0F7F 208C0F PUTVLG: JSR GVCALC ; GET ADDR OF GLOBAL INTO [I]
|
||
0F82 A579 LDA VALUE+HI ; GET MSB
|
||
0F84 917A STA (I),Y ; STORE AS 1ST BYTE ([Y] = 0)
|
||
0F86 C8 INY ; [Y] = 1
|
||
0F87 A578 LDA VALUE+LO ; NOW GET LSB
|
||
0F89 917A STA (I),Y ; STORE AS 2ND BYTE
|
||
0F8B 60 RTS
|
||
|
||
0F8C ; -----------------------
|
||
0F8C ; CALC GLOBAL WORD OFFSET
|
||
0F8C ; -----------------------
|
||
|
||
0F8C ; ENTRY: VAR-ID BYTE (16-255) IN [A]
|
||
0F8C ; EXIT: ADDRESS OF GLOBAL VAR IN [VAL]
|
||
0F8C ; [Y] = 0 FOR INDEXING
|
||
|
||
0F8C 38 GVCALC: SEC
|
||
0F8D E910 SBC #$10 ; FORM A ZERO-ALIGNED INDEX
|
||
0F8F A000 LDY #0 ; MAKE SURE MSB OF OFFSET AND [Y]
|
||
0F91 847B STY I+HI ; ARE CLEARED
|
||
|
||
0F93 0A ASL A ; MULTIPLY OFFSET BY 2
|
||
0F94 267B ROL I+HI ; TO WORD-ALIGN IT
|
||
|
||
0F96 18 CLC ; TO ADDRESS OF GLOBAL TABLE
|
||
0F97 659C ADC GLOBAL+LO ; TO FORM THE ABSOLUTE
|
||
0F99 857A STA I+LO ; ADDRESS OF THE
|
||
0F9B A57B LDA I+HI ; DESIRED GLOBAL VARIABLE
|
||
0F9D 659D ADC GLOBAL+HI ; STORE ADDRESS BACK IN [I]
|
||
0F9F 857B STA I+HI ; AS A POINTER
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- MAIN LOOP PAGE 31
|
||
--- OPCODE SUPPORT SUBROUTINES ---
|
||
|
||
|
||
0FA1 60 WCEX: RTS
|
||
|
||
0FA2 ; ---------------
|
||
0FA2 ; PREDICATE FAILS
|
||
0FA2 ; ---------------
|
||
|
||
0FA2 20D21A PREDF: JSR NEXTPC ; GET 1ST BRANCH BYTE
|
||
0FA5 100C BPL PREDB ; BRANCH IF BIT 7 CLEAR
|
||
|
||
0FA7 ; -----------------------
|
||
0FA7 ; IGNORE PREDICATE BRANCH
|
||
0FA7 ; -----------------------
|
||
|
||
0FA7 ; ENTRY: 1ST BRANCH BYTE IN [A]
|
||
|
||
0FA7 2940 PREDNB: AND #%01000000 ; TEST BIT 6
|
||
0FA9 D0F6 BNE WCEX ; SHORT BRANCH IF SET
|
||
0FAB 4CD21A JMP NEXTPC ; ELSE SKIP OVER 2ND BRANCH BYTE
|
||
|
||
0FAE ; ------------------
|
||
0FAE ; PREDICATE SUCCEEDS
|
||
0FAE ; ------------------
|
||
|
||
0FAE 20D21A PREDS: JSR NEXTPC ; GET 1ST BRANCH BYTE
|
||
0FB1 10F4 BPL PREDNB ; DON'T BRANCH IF BIT 7 CLEAR
|
||
|
||
0FB3 ; --------------------------
|
||
0FB3 ; PERFORM A PREDICATE BRANCH
|
||
0FB3 ; --------------------------
|
||
|
||
0FB3 ; ENTRY: 1ST PRED BYTE IN [A]
|
||
|
||
0FB3 AA PREDB: TAX ; COPY FOR LATER
|
||
0FB4 2940 AND #%01000000 ; LONG OR SHORT BRANCH?
|
||
0FB6 F00B BEQ PREDLB ; LONG IF BIT 6 IS CLEAR
|
||
|
||
0FB8 ; HANDLE A SHORT BRANCH
|
||
|
||
0FB8 8A TXA ; RESTORE PRED BYTE
|
||
0FB9 293F AND #%00111111 ; FORM SHORT OFFSET
|
||
0FBB 8578 STA VALUE+LO ; USE AS LSB OF BRANCH OFFSET
|
||
0FBD A900 LDA #0
|
||
0FBF 8579 STA VALUE+HI ; MSB OF OFFSET IS ZERO
|
||
0FC1 F013 BEQ PREDB1 ; DO THE BRANCH
|
||
|
||
0FC3 ; HANDLE A LONG BRANCH
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- MAIN LOOP PAGE 32
|
||
--- OPCODE SUPPORT SUBROUTINES ---
|
||
|
||
|
||
0FC3 8A PREDLB: TXA ; RESTORE 1ST PRED BYTE
|
||
0FC4 293F AND #%00111111 ; FORM MSB OF OFFSET
|
||
0FC6 AA TAX ; SAVE HERE FOR REFERENCE
|
||
|
||
0FC7 2920 AND #%00100000 ; CHECK SIGN OF 14-BIT VALUE
|
||
0FC9 F004 BEQ DOB2 ; POSITIVE IF ZERO, USE [X] FOR MSB
|
||
|
||
0FCB 8A TXA ; ELSE RESTORE BYTE
|
||
0FCC 09E0 ORA #%11100000 ; EXTEND SIGN BIT
|
||
0FCE AA TAX ; BACK HERE FOR STORAGE
|
||
|
||
0FCF 8679 DOB2: STX VALUE+HI
|
||
0FD1 20D21A JSR NEXTPC ; FETCH LSB OF 14-BIT OFFSET
|
||
0FD4 8578 STA VALUE+LO
|
||
|
||
0FD6 ; BRANCH TO Z-ADDRESS IN [VALUE]
|
||
|
||
0FD6 A579 PREDB1: LDA VALUE+HI ; CHECK MSB OF OFFSET
|
||
0FD8 D00E BNE PREDB3 ; DO BRANCH IF NZ
|
||
0FDA A578 LDA VALUE+LO ; IF LSB IS NON-ZERO,
|
||
0FDC D003 BNE PREDB2 ; MAKE SURE IT ISN'T 1
|
||
0FDE 4C8E10 JMP GRFALS ; ELSE DO AN "RFALSE" IF [VALUE] = 0
|
||
|
||
0FE1 C901 PREDB2: CMP #1 ; IF OFFSET = 1
|
||
0FE3 D003 BNE PREDB3
|
||
0FE5 4C8310 JMP GRTRUE ; DO AN "RTRUE"
|
||
|
||
0FE8 ; ENTRY POINT FOR "JUMP"
|
||
|
||
0FE8 200610 PREDB3: JSR DECVAL ; CALC [VALUE]-2
|
||
0FEB 200610 JSR DECVAL
|
||
;***
|
||
0FEE A579 LDA VALUE+HI
|
||
0FF0 A678 LDX VALUE+LO
|
||
0FF2 20D918 JSR ADDGPC
|
||
|
||
0FF5 A579 LDA VALUE+HI ; EXTEND SIGN
|
||
0FF7 2980 AND #$80
|
||
0FF9 18 CLC
|
||
0FFA 6581 ADC GPCH
|
||
0FFC 8581 STA GPCH
|
||
;***
|
||
|
||
|
||
; LDA VALUE+LO ; GET LSB OF OFFSET
|
||
; CLC
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- MAIN LOOP PAGE 33
|
||
--- OPCODE SUPPORT SUBROUTINES ---
|
||
|
||
; ADC GPCL ; ADD LSB OF GPC
|
||
; BCC PREDB5 ; IF OVERFLOWED,
|
||
; INC VALUE+HI ; UPDATE MSB OF OFFSET
|
||
|
||
;PREDB5: STA GPCL ; UPDATE ZPCL
|
||
; LDA VALUE+HI ; IF MSB IS ZERO,
|
||
; BEQ GNOOP ; PAGE IS STILL VALID
|
||
; CLC
|
||
; ADC GPCH
|
||
; STA GPCH ; ELSE SWITCH PAGES
|
||
|
||
; LDA #0 ; INVALIDATE [GPC]
|
||
; STA GPCFLG
|
||
|
||
0FFE ; FALL THROUGH ...
|
||
|
||
0FFE ; ----
|
||
0FFE ; NOOP
|
||
0FFE ; ----
|
||
|
||
0FFE 60 GNOOP: RTS
|
||
|
||
0FFF ; -----------------
|
||
0FFF ; INCREMENT [VALUE]
|
||
0FFF ; -----------------
|
||
|
||
0FFF E678 INCVAL: INC VALUE+LO
|
||
1001 D002 BNE IVX
|
||
1003 E679 INC VALUE+HI
|
||
1005 60 IVX: RTS
|
||
|
||
1006 ; -----------------
|
||
1006 ; DECREMENT [VALUE]
|
||
1006 ; -----------------
|
||
|
||
1006 A578 DECVAL: LDA VALUE+LO
|
||
1008 38 SEC
|
||
1009 E901 SBC #1
|
||
100B 8578 STA VALUE+LO
|
||
100D B002 BCS DVX
|
||
100F C679 DEC VALUE+HI
|
||
1011 60 DVX: RTS
|
||
|
||
1012 ; ----------------------
|
||
1012 ; MOVE [ARG1] TO [VALUE]
|
||
1012 ; ----------------------
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- MAIN LOOP PAGE 34
|
||
--- OPCODE SUPPORT SUBROUTINES ---
|
||
|
||
1012 A56D A12VAL: LDA ARG1+LO
|
||
1014 8578 STA VALUE+LO
|
||
1016 A56E LDA ARG1+HI
|
||
1018 8579 STA VALUE+HI
|
||
101A 60 RTS
|
||
|
||
END
|
||
INCLUD DISPATCH.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- MAIN LOOP PAGE 35
|
||
--- OPCODE DISPATCH TABLES ---
|
||
|
||
|
||
101B ; -------------------
|
||
101B ; 0-OP DISPATCH TABLE
|
||
101B ; -------------------
|
||
|
||
101B FE0F OPT0: DW GNOOP ; 0
|
||
101D 8310 DW GRTRUE ; 1
|
||
101F 8E10 DW GRFALS ; 2
|
||
1021 9210 DW GRSTAK ; 3
|
||
1023 280F DW GFSTAK ; 4
|
||
1025 7A1C DW GQUIT ; 5
|
||
1027 AE0F DW GCOPYP ; 6
|
||
1029 461E DW GVERP ; 7
|
||
|
||
0008 NOPS0 EQU 8 ; # VALID 0-OPS
|
||
|
||
102B ; -------------------
|
||
102B ; 1-OP DISPATCH TABLE
|
||
102B ; -------------------
|
||
|
||
102B 9810 OPT1: DW GPUSH ; 0
|
||
102D 9F10 DW GPOP ; 1
|
||
102F A510 DW GVALUE ; 2
|
||
1031 AD10 DW GINC ; 3
|
||
1033 B810 DW GDEC ; 4
|
||
1035 C510 DW GZEROP ; 5
|
||
1037 D110 DW GBNOT ; 6
|
||
1039 DD10 DW GJUMP ; 7
|
||
103B E310 DW GRET ; 8
|
||
|
||
0009 NOPS1 EQU 9 ; # VALID 1-OPS
|
||
|
||
103D ; -------------------
|
||
103D ; 2-OP DISPATCH TABLE
|
||
103D ; -------------------
|
||
|
||
103D DA0E OPT2: DW BADOP2 ; 0, UNDEFINED
|
||
103F 2511 DW GADD ; 1
|
||
1041 3211 DW GSUB ; 2
|
||
1043 3F11 DW GMUL ; 3
|
||
1045 6311 DW GDIV ; 4
|
||
1047 6D11 DW GMOD ; 5
|
||
1049 0312 DW GBAND ; 6
|
||
104B 0F12 DW GBIOR ; 7
|
||
104D 1B12 DW GBXOR ; 8
|
||
104F 2712 DW GBITSP ; 9
|
||
1051 3912 DW GEQP ; 10
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- MAIN LOOP PAGE 36
|
||
--- OPCODE DISPATCH TABLES ---
|
||
|
||
1053 6512 DW GLESSP ; 11
|
||
1055 6B12 DW GDLESP ; 12
|
||
1057 7912 DW GGRTRP ; 13
|
||
1059 8412 DW GIGRTP ; 14
|
||
105B B412 DW GSET ; 15
|
||
105D C112 DW GGET ; 16
|
||
105F D512 DW GGETB ; 17
|
||
|
||
0012 NOPS2 EQU 18 ; # VALID 2-OPS
|
||
|
||
1061 ; -------------------
|
||
1061 ; X-OP DISPATCH TABLE
|
||
1061 ; -------------------
|
||
|
||
1061 F712 OPTX: DW GCALL ; 0
|
||
1063 F113 DW GPUT ; 1
|
||
1065 FC13 DW GPUTB ; 2
|
||
1067 241D DW GINPUT ; 3
|
||
1069 BD14 DW GSHOWI ; 4
|
||
106B 8816 DW GSETI ; 5
|
||
106D BC16 DW GSWAPI ; 6
|
||
106F 251E DW GSOUND ; 7
|
||
1071 3F14 DW GRAND ; 8
|
||
1073 1F1C DW GCLEAR ; 9
|
||
1075 B714 DW GSHOWN ; 10
|
||
1077 1C17 DW GWIND ; 11
|
||
1079 6114 DW GITER ; 12
|
||
107B B414 DW GLOAD ; 13
|
||
107D B114 DW GDUMP ; 14
|
||
107F D01F DW GREST ; 15
|
||
1081 6D20 DW GSAVE ; 16
|
||
|
||
0011 NOPSX EQU 17 ; # VALID X-OPS
|
||
|
||
END
|
||
|
||
INCLUD OPS0.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 37
|
||
--- 0-OPS ---
|
||
|
||
|
||
1083 ; -----
|
||
1083 ; RTRUE
|
||
1083 ; -----
|
||
|
||
1083 ; SIMULATE "RETURN 1"
|
||
|
||
1083 A201 GRTRUE: LDX #1
|
||
|
||
1085 A900 GRT1: LDA #0
|
||
|
||
1087 866D GRT2: STX ARG1+LO
|
||
1089 856E STA ARG1+HI
|
||
108B 4CE310 JMP GRET
|
||
|
||
108E ; ------
|
||
108E ; RFALSE
|
||
108E ; ------
|
||
|
||
108E ; SIMULATE "RETURN 0"
|
||
|
||
108E A200 GRFALS: LDX #0
|
||
1090 F0F3 BEQ GRT1
|
||
|
||
1092 ; ------
|
||
1092 ; RSTACK
|
||
1092 ; ------
|
||
|
||
1092 ; "RETURN" WITH VALUE ON STACK
|
||
|
||
1092 20280F GRSTAK: JSR POPVAL ; GET VALUE INTO [X/A]
|
||
1095 4C8710 JMP GRT2
|
||
|
||
1098 ; ------
|
||
1098 ; FSTACK
|
||
1098 ; ------
|
||
|
||
1098 ; FLUSH TOP VALUE OFF G-STACK
|
||
|
||
0F28 GFSTAK EQU POPVAL
|
||
|
||
END
|
||
INCLUD OPS1.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 38
|
||
--- 1-OPS ---
|
||
|
||
|
||
1098 ; ----
|
||
1098 ; PUSH
|
||
1098 ; ----
|
||
|
||
1098 ; PUSH [ARG1] ONTO G-STACK
|
||
|
||
1098 A66D GPUSH: LDX ARG1+LO
|
||
109A A56E LDA ARG1+HI
|
||
109C 4C420F JMP PSHXA
|
||
|
||
109F ; ---
|
||
109F ; POP
|
||
109F ; ---
|
||
|
||
109F ; POP Z-STACK INTO VARIABLE [ARG1]
|
||
|
||
109F 20280F GPOP: JSR POPVAL
|
||
10A2 4CC010 JMP DOPUT
|
||
|
||
10A5 ; -----
|
||
10A5 ; VALUE
|
||
10A5 ; -----
|
||
|
||
10A5 ; RETURN VALUE OF VARIABLE [ARG1]
|
||
|
||
10A5 A56D GVALUE: LDA ARG1+LO ; GET VARIABLE ID
|
||
10A7 20F90E JSR VARGET ; PUT VALUE INTO [VALUE]
|
||
10AA 4C660F JMP PUTVAL
|
||
|
||
10AD ; ---
|
||
10AD ; INC
|
||
10AD ; ---
|
||
|
||
10AD ; INCREMENT VARIABLE [ARG1]
|
||
|
||
10AD A56D GINC: LDA ARG1+LO
|
||
10AF 20F90E JSR VARGET
|
||
10B2 20FF0F JSR INCVAL
|
||
10B5 4CC010 JMP DOPUT
|
||
|
||
10B8 ; ---
|
||
10B8 ; DEC
|
||
10B8 ; ---
|
||
|
||
10B8 ; DECREMENT VARIABLE [ARG1]
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 39
|
||
--- 1-OPS ---
|
||
|
||
10B8 A56D GDEC: LDA ARG1+LO
|
||
10BA 20F90E JSR VARGET
|
||
10BD 200610 JSR DECVAL
|
||
|
||
10C0 A56D DOPUT: LDA ARG1+LO
|
||
10C2 4C550F JMP VARPUT
|
||
|
||
10C5 ; -----
|
||
10C5 ; ZERO?
|
||
10C5 ; -----
|
||
|
||
10C5 ; [ARG1] = 0 ?
|
||
|
||
10C5 A56D GZEROP: LDA ARG1+LO
|
||
10C7 056E ORA ARG1+HI
|
||
10C9 F003 BEQ PYES
|
||
10CB 4CA20F JMP PREDF
|
||
|
||
10CE 4CAE0F PYES: JMP PREDS
|
||
|
||
10D1 ; ----
|
||
10D1 ; BNOT
|
||
10D1 ; ----
|
||
|
||
10D1 ; COMPLEMENT [ARG1]
|
||
|
||
10D1 A56D GBNOT: LDA ARG1+LO
|
||
10D3 49FF EOR #$FF
|
||
10D5 AA TAX
|
||
10D6 A56E LDA ARG1+HI
|
||
10D8 49FF EOR #$FF
|
||
10DA 4C1E11 JMP VEXIT
|
||
|
||
10DD ; ----
|
||
10DD ; JUMP
|
||
10DD ; ----
|
||
|
||
10DD ; JUMP TO G-ADDRESS [ARG1]
|
||
|
||
10DD 201210 GJUMP: JSR A12VAL ; MOVE [ARG1] TO [VALUE]
|
||
10E0 4CE80F JMP PREDB3 ; A BRANCH THAT ALWAYS SUCCEEDS
|
||
|
||
10E3 ; ------
|
||
10E3 ; RETURN
|
||
10E3 ; ------
|
||
|
||
10E3 ; RETURN FROM "CALL" WITH VALUE [ARG1]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 40
|
||
--- 1-OPS ---
|
||
|
||
|
||
10E3 A58F GRET: LDA OLDGSP
|
||
10E5 858E STA GSP ; SYNC THE G-STACK
|
||
|
||
10E7 20280F JSR POPVAL ; POP # LOCALS INTO [X]
|
||
10EA 8A TXA ; ANY LOCALS?
|
||
10EB F018 BEQ RET2 ; NO, SKIP
|
||
|
||
10ED ; RESTORE ALL PUSHED LOCALS
|
||
|
||
10ED 0A ASL A ; WORD-ALIGN # LOCALS
|
||
10EE 8576 STA ADEX ; USE FOR INDEXING
|
||
10F0 C676 DEC ADEX ; ZERO-ALIGN THE INDEX
|
||
|
||
10F2 20280F RET1: JSR POPVAL ; POP LOCAL INTO [X/A] AND [VALUE]
|
||
10F5 A676 LDX ADEX ; GET INDEX
|
||
10F7 9D800A STA LOCALS,X ; STORE MSB IN TABLE
|
||
10FA CA DEX
|
||
10FB A578 LDA VALUE+LO ; SAME FOR LSB
|
||
10FD 9D800A STA LOCALS,X
|
||
1100 CA DEX
|
||
1101 8676 STX ADEX ; SAVE INDEX
|
||
1103 10ED BPL RET1 ; LOOP TILL EMPTY
|
||
|
||
1105 ; RESTORE GPC
|
||
|
||
1105 20280F RET2: JSR POPVAL ; RESTORE [GPC]
|
||
|
||
;***
|
||
1108 8682 STX GPC0 ; DON'T FORGET THAT 17TH BIT
|
||
110A 20280F JSR POPVAL
|
||
;***
|
||
|
||
110D 8680 STX GPCL
|
||
110F 8581 STA GPCH
|
||
1111 A900 LDA #0
|
||
1113 8583 STA GPCFLG ; PC HAS CHANGED
|
||
|
||
1115 20280F JSR POPVAL
|
||
1118 868F STX OLDGSP ; RESTORE OLD GSP
|
||
|
||
111A A66D LDX ARG1+LO
|
||
111C A56E LDA ARG1+HI
|
||
|
||
111E ; FALL THROUGH TO ...
|
||
|
||
111E ; -----------------
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 41
|
||
--- 1-OPS ---
|
||
|
||
111E ; VALUE RETURN EXIT
|
||
111E ; -----------------
|
||
|
||
111E ; ENTRY: VALUE IN [X/A] (LSB/MSB)
|
||
|
||
111E 8678 VEXIT: STX VALUE+LO
|
||
1120 8579 STA VALUE+HI
|
||
1122 4C660F JMP PUTVAL
|
||
|
||
END
|
||
INCLUD OPS2.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 42
|
||
--- 2-OPS ---
|
||
|
||
|
||
1125 ; ---
|
||
1125 ; ADD
|
||
1125 ; ---
|
||
|
||
1125 ; RETURN [ARG1] + [ARG2]
|
||
|
||
1125 A56D GADD: LDA ARG1+LO
|
||
1127 18 CLC
|
||
1128 656F ADC ARG2+LO
|
||
112A AA TAX
|
||
112B A56E LDA ARG1+HI
|
||
112D 6570 ADC ARG2+HI
|
||
112F 4C1E11 JMP VEXIT
|
||
|
||
1132 ; ---
|
||
1132 ; SUB
|
||
1132 ; ---
|
||
|
||
1132 ; RETURN [ARG1] - [ARG2]
|
||
|
||
1132 A56D GSUB: LDA ARG1+LO
|
||
1134 38 SEC
|
||
1135 E56F SBC ARG2+LO
|
||
1137 AA TAX
|
||
1138 A56E LDA ARG1+HI
|
||
113A E570 SBC ARG2+HI
|
||
113C 4C1E11 JMP VEXIT
|
||
|
||
113F ; ---
|
||
113F ; MUL
|
||
113F ; ---
|
||
|
||
113F ; RETURN [ARG1] * [ARG2]
|
||
|
||
113F 20F911 GMUL: JSR MINIT ; INIT LOOP AND TEMPS
|
||
|
||
1142 66A9 GMLOOP: ROR MTEMP+HI
|
||
1144 66A8 ROR MTEMP+LO
|
||
1146 6670 ROR ARG2+HI
|
||
1148 666F ROR ARG2+LO
|
||
114A 900D BCC GMNEXT
|
||
|
||
114C A56D LDA ARG1+LO
|
||
114E 18 CLC
|
||
114F 65A8 ADC MTEMP+LO
|
||
1151 85A8 STA MTEMP+LO
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 43
|
||
--- 2-OPS ---
|
||
|
||
1153 A56E LDA ARG1+HI
|
||
1155 65A9 ADC MTEMP+HI
|
||
1157 85A9 STA MTEMP+HI
|
||
|
||
1159 CA GMNEXT: DEX
|
||
115A 10E6 BPL GMLOOP
|
||
|
||
115C A66F LDX ARG2+LO ; [ARG2] CONTAINS PRODUCT
|
||
115E A570 LDA ARG2+HI
|
||
1160 4C1E11 JMP VEXIT
|
||
|
||
1163 ; ---
|
||
1163 ; DIV
|
||
1163 ; ---
|
||
|
||
1163 ; RETURN QUOTIENT OF [ARG1] / [ARG2]
|
||
|
||
1163 207711 GDIV: JSR DIVIDE
|
||
1166 A6A4 LDX QUOT+LO
|
||
1168 A5A5 LDA QUOT+HI
|
||
116A 4C1E11 JMP VEXIT
|
||
|
||
116D ; ---
|
||
116D ; MOD
|
||
116D ; ---
|
||
|
||
116D ; RETURN REMAINDER OF [ARG1] / [ARG2]
|
||
|
||
116D 207711 GMOD: JSR DIVIDE
|
||
1170 A6A6 LDX REMAIN+LO
|
||
1172 A5A7 LDA REMAIN+HI
|
||
1174 4C1E11 JMP VEXIT
|
||
|
||
1177 ; ---------------
|
||
1177 ; SIGNED DIVISION
|
||
1177 ; ---------------
|
||
|
||
1177 ; ENTRY: DIVIDEND IN [ARG1], DIVISOR IN [ARG2]
|
||
1177 ; EXIT: QUOTIENT IN [QUOT], REMAINDER IN [REMAIN]
|
||
|
||
1177 A56E DIVIDE: LDA ARG1+HI ; SIGN OF THE DIVIDEND
|
||
1179 85AB STA RSIGN ; IS SIGN OF REMAINDER
|
||
117B 4570 EOR ARG2+HI ; SIGN OF QUOTIENT IS POSITIVE
|
||
117D 85AA STA QSIGN ; IF SIGNS OF TERMS ARE THE SAME
|
||
|
||
117F A56D LDA ARG1+LO ; MOVE [ARG1] TO [QUOT]
|
||
1181 85A4 STA QUOT+LO
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 44
|
||
--- 2-OPS ---
|
||
|
||
1183 A56E LDA ARG1+HI ; IS DIVIDEND POSITIVE?
|
||
1185 85A5 STA QUOT+HI
|
||
1187 1003 BPL ABSDIV ; YES, CONTINUE
|
||
1189 20B511 JSR ABQUOT ; ELSE CALC ABSOLUTE VALUE
|
||
|
||
118C A56F ABSDIV: LDA ARG2+LO ; MOVE [ARG2] TO [REMAIN]
|
||
118E 85A6 STA REMAIN+LO
|
||
1190 A570 LDA ARG2+HI ; IS DIVISOR POSITIVE?
|
||
1192 85A7 STA REMAIN+HI
|
||
1194 1003 BPL GODIV ; IF NOT,
|
||
1196 20A711 JSR ABREM ; CALC ABSOLUTE VALUE
|
||
|
||
1199 20C311 GODIV: JSR UDIV ; UNSIGNED DIVIDE
|
||
|
||
119C A5AA LDA QSIGN ; SHOULD QUOTIENT BE FLIPPED?
|
||
119E 1003 BPL RFLIP ; NO, CHECK REMAINDER
|
||
11A0 20B511 JSR ABQUOT ; ELSE FLIP QUOTIENT
|
||
|
||
11A3 A5AB RFLIP: LDA RSIGN ; FLIP REMAINDER?
|
||
11A5 100D BPL DIVEX ; NO, SCRAM
|
||
|
||
11A7 ; OR FALL THROUGH ...
|
||
|
||
11A7 ; ----------------
|
||
11A7 ; CALC ABS(REMAIN)
|
||
11A7 ; ----------------
|
||
|
||
11A7 A900 ABREM: LDA #0
|
||
11A9 38 SEC
|
||
11AA E5A6 SBC REMAIN+LO
|
||
11AC 85A6 STA REMAIN+LO
|
||
11AE A900 LDA #0
|
||
11B0 E5A7 SBC REMAIN+HI
|
||
11B2 85A7 STA REMAIN+HI
|
||
|
||
11B4 60 DIVEX: RTS
|
||
|
||
11B5 ; --------------
|
||
11B5 ; CALC ABS(QUOT)
|
||
11B5 ; --------------
|
||
|
||
11B5 A900 ABQUOT: LDA #0
|
||
11B7 38 SEC
|
||
11B8 E5A4 SBC QUOT+LO
|
||
11BA 85A4 STA QUOT+LO
|
||
11BC A900 LDA #0
|
||
11BE E5A5 SBC QUOT+HI
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 45
|
||
--- 2-OPS ---
|
||
|
||
11C0 85A5 STA QUOT+HI
|
||
11C2 60 RTS
|
||
|
||
11C3 ; -----------------
|
||
11C3 ; UNSIGNED DIVISION
|
||
11C3 ; -----------------
|
||
|
||
11C3 ; ENTRY: DIVIDEND IN [QUOT], DIVISOR IN [REMAIN]
|
||
11C3 ; EXIT: QUOTIENT IN [QUOT], REMAINDER IN [REMAIN]
|
||
|
||
11C3 A5A6 UDIV: LDA REMAIN+LO
|
||
11C5 05A7 ORA REMAIN+HI
|
||
11C7 F02B BEQ DIVERR ; CAN'T DIVIDE BY ZERO!
|
||
|
||
11C9 20F911 JSR MINIT ; INIT LOOP & TEMP REGISTER
|
||
|
||
11CC 26A4 UDLOOP: ROL QUOT+LO
|
||
11CE 26A5 ROL QUOT+HI
|
||
11D0 26A8 ROL MTEMP+LO
|
||
11D2 26A9 ROL MTEMP+HI
|
||
|
||
11D4 A5A8 LDA MTEMP+LO
|
||
11D6 38 SEC
|
||
11D7 E5A6 SBC REMAIN+LO
|
||
11D9 A8 TAY
|
||
11DA A5A9 LDA MTEMP+HI
|
||
11DC E5A7 SBC REMAIN+HI
|
||
11DE 9004 BCC UDNEXT
|
||
11E0 84A8 STY MTEMP+LO
|
||
11E2 85A9 STA MTEMP+HI
|
||
|
||
11E4 CA UDNEXT: DEX
|
||
11E5 D0E5 BNE UDLOOP
|
||
|
||
11E7 26A4 ROL QUOT+LO ; SHIFT LAST CARRY
|
||
11E9 26A5 ROL QUOT+HI ; INTO QUOTIENT
|
||
|
||
11EB A5A8 LDA MTEMP+LO ; MOVE REMAINDER
|
||
11ED 85A6 STA REMAIN+LO ; INTO [REMAIN]
|
||
11EF A5A9 LDA MTEMP+HI
|
||
11F1 85A7 STA REMAIN+HI
|
||
11F3 60 RTS
|
||
|
||
11F4 ; *** ERROR #8: DIVISION BY ZERO ***
|
||
|
||
11F4 A908 DIVERR: LDA #8
|
||
11F6 4C5F1C JMP GERROR
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 46
|
||
--- 2-OPS ---
|
||
|
||
|
||
11F9 ; ---------
|
||
11F9 ; MATH INIT
|
||
11F9 ; ---------
|
||
|
||
11F9 A210 MINIT: LDX #16 ; INIT BIT LOOP INDEX
|
||
11FB A900 LDA #0 ; CLEAR TEMP MATH REGISTER
|
||
11FD 85A8 STA MTEMP+LO
|
||
11FF 85A9 STA MTEMP+HI
|
||
1201 18 CLC ; CLEAR FOR LOOPING
|
||
1202 60 RTS
|
||
|
||
1203 ; ----
|
||
1203 ; BAND
|
||
1203 ; ----
|
||
|
||
1203 ; RETURN [ARG1] "AND" [ARG2]
|
||
|
||
1203 A56D GBAND: LDA ARG1+LO
|
||
1205 256F AND ARG2+LO
|
||
1207 AA TAX
|
||
1208 A56E LDA ARG1+HI
|
||
120A 2570 AND ARG2+HI
|
||
120C 4C1E11 JMP VEXIT
|
||
|
||
120F ; ----
|
||
120F ; BIOR
|
||
120F ; ----
|
||
|
||
120F ; RETURN [ARG1] "OR" [ARG2]
|
||
|
||
120F A56D GBIOR: LDA ARG1+LO
|
||
1211 056F ORA ARG2+LO
|
||
1213 AA TAX
|
||
1214 A56E LDA ARG1+HI
|
||
1216 0570 ORA ARG2+HI
|
||
1218 4C1E11 JMP VEXIT
|
||
|
||
121B ; ----
|
||
121B ; BXOR
|
||
121B ; ----
|
||
|
||
121B ; RETURN [ARG1] "XOR" [ARG2]
|
||
|
||
121B A56D GBXOR: LDA ARG1+LO
|
||
121D 456F EOR ARG2+LO
|
||
121F AA TAX
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 47
|
||
--- 2-OPS ---
|
||
|
||
1220 A56E LDA ARG1+HI
|
||
1222 4570 EOR ARG2+HI
|
||
1224 4C1E11 JMP VEXIT
|
||
|
||
1227 ; -----
|
||
1227 ; BITS?
|
||
1227 ; -----
|
||
|
||
1227 ; IS EVERY "ON" BIT IN [ARG1] ALSO "ON" IN [ARG2]?
|
||
|
||
1227 A56F GBITSP: LDA ARG2+LO
|
||
1229 256D AND ARG1+LO
|
||
122B C56F CMP ARG2+LO
|
||
122D D033 BNE PBAD
|
||
122F A570 LDA ARG2+HI
|
||
1231 256E AND ARG1+HI
|
||
1233 C570 CMP ARG2+HI
|
||
1235 D02B BNE PBAD
|
||
1237 F026 BEQ PGOOD
|
||
|
||
1239 ; ------
|
||
1239 ; EQUAL?
|
||
1239 ; ------
|
||
|
||
1239 ; DOES [ARG1] = [ARG2] (OR [ARG3] OR [ARG4])?
|
||
|
||
1239 C66C GEQP: DEC NARGS ; ZERO-ALIGN ARGUMENT COUNT
|
||
123B A66D LDX ARG1+LO ; FETCH LSB AND
|
||
123D A56E LDA ARG1+HI ; MSB OF [ARG1]
|
||
|
||
123F E46F CPX ARG2+LO ; LSB OF [ARG2] MATCHED?
|
||
1241 D004 BNE EQP1 ; NO, TRY NEXT ARG
|
||
1243 C570 CMP ARG2+HI ; MSBS MATCH?
|
||
1245 F018 BEQ PGOOD ; HOORAY!
|
||
|
||
1247 C66C EQP1: DEC NARGS ; OUT OF ARGS YET?
|
||
1249 F017 BEQ PBAD ; IF SO, SCRAM
|
||
|
||
124B E471 CPX ARG3+LO ; ELSE CHECK [ARG3]
|
||
124D D004 BNE EQP2
|
||
124F C572 CMP ARG3+HI
|
||
1251 F00C BEQ PGOOD
|
||
|
||
1253 C66C EQP2: DEC NARGS ; ANOTHER ARG?
|
||
1255 F00B BEQ PBAD ; NO, EXIT
|
||
|
||
1257 E473 CPX ARG4+LO ; ELSE CHECK [ARG4]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 48
|
||
--- 2-OPS ---
|
||
|
||
1259 D007 BNE PBAD
|
||
125B C574 CMP ARG4+HI
|
||
125D D003 BNE PBAD
|
||
|
||
125F 4CAE0F PGOOD: JMP PREDS
|
||
|
||
1262 4CA20F PBAD: JMP PREDF
|
||
|
||
1265 ; -----
|
||
1265 ; LESS?
|
||
1265 ; -----
|
||
|
||
1265 ; IS [ARG1] < [ARG2]?
|
||
|
||
1265 201210 GLESSP: JSR A12VAL ; MOVE [ARG1] INTO [VALUE]
|
||
1268 4C6E12 JMP DLS0
|
||
|
||
126B ; ------
|
||
126B ; DLESS?
|
||
126B ; ------
|
||
|
||
126B ; DECREMENT [ARG1]; SUCCEED IF < [ARG2]
|
||
|
||
126B 20B810 GDLESP: JSR GDEC
|
||
|
||
126E A56F DLS0: LDA ARG2+LO ; MOVE [ARG2]
|
||
1270 857A STA I+LO ; INTO [I]
|
||
1272 A570 LDA ARG2+HI
|
||
1274 857B STA I+HI
|
||
|
||
1276 4C9712 JMP COMPAR ; [ARG1]-1 IS ALREADY IN [VALUE]
|
||
|
||
1279 ; -----
|
||
1279 ; GRTR?
|
||
1279 ; -----
|
||
|
||
1279 ; IS [ARG1] > [ARG2]?
|
||
|
||
1279 A56D GGRTRP: LDA ARG1+LO ; MOVE [ARG1]
|
||
127B 857A STA I+LO ; INTO [I]
|
||
127D A56E LDA ARG1+HI
|
||
127F 857B STA I+HI
|
||
1281 4C8F12 JMP A2VAL
|
||
|
||
1284 ; ------
|
||
1284 ; IGRTR?
|
||
1284 ; ------
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 49
|
||
--- 2-OPS ---
|
||
|
||
|
||
1284 ; INCREMENT [ARG1]; SUCCEED IF > [ARG2]
|
||
|
||
1284 20AD10 GIGRTP: JSR GINC
|
||
|
||
1287 A578 LDA VALUE+LO ; MOVE [ARG1]-1
|
||
1289 857A STA I+LO ; INTO [I]
|
||
128B A579 LDA VALUE+HI
|
||
128D 857B STA I+HI
|
||
|
||
128F A56F A2VAL: LDA ARG2+LO ; MOVE [ARG2]
|
||
1291 8578 STA VALUE+LO ; INTO [VALUE]
|
||
1293 A570 LDA ARG2+HI
|
||
1295 8579 STA VALUE+HI
|
||
|
||
1297 209E12 COMPAR: JSR SCOMP ; SIGNED COMPARE
|
||
129A 90C3 BCC PGOOD
|
||
129C B0C4 BCS PBAD
|
||
|
||
129E ; -------------------------------
|
||
129E ; SIGNED COMPARE OF [VALUE] & [I]
|
||
129E ; -------------------------------
|
||
|
||
129E A57B SCOMP: LDA I+HI
|
||
12A0 4579 EOR VALUE+HI
|
||
12A2 1005 BPL SCMP
|
||
12A4 A57B LDA I+HI
|
||
12A6 C579 CMP VALUE+HI
|
||
12A8 60 RTS
|
||
|
||
12A9 A579 SCMP: LDA VALUE+HI
|
||
12AB C57B CMP I+HI
|
||
12AD D004 BNE SCEX
|
||
12AF A578 LDA VALUE+LO
|
||
12B1 C57A CMP I+LO
|
||
12B3 60 SCEX: RTS
|
||
|
||
12B4 ; ---
|
||
12B4 ; SET
|
||
12B4 ; ---
|
||
|
||
12B4 ; SET VARIABLE [ARG1] EQUAL TO [ARG2]
|
||
|
||
12B4 A56F GSET: LDA ARG2+LO ; MOVE [ARG2]
|
||
12B6 8578 STA VALUE ; INTO [VALUE]
|
||
12B8 A570 LDA ARG2+HI
|
||
12BA 8579 STA VALUE+HI
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 50
|
||
--- 2-OPS ---
|
||
|
||
|
||
12BC A56D LDA ARG1+LO ; GET VARIABLE ID
|
||
12BE 4C550F JMP VARPUT ; AND SET THE VALUE
|
||
|
||
12C1 ; ---
|
||
12C1 ; GET
|
||
12C1 ; ---
|
||
|
||
12C1 ; RETURN ITEM [ARG2] IN WORD-TABLE [ARG1]
|
||
|
||
12C1 20E512 GGET: JSR CALCW ; V-ADDR OF WORD IN [VPC]
|
||
;***
|
||
12C4 A900 LDA #00
|
||
12C6 8588 STA VPC0
|
||
;***
|
||
12C8 20251B JSR GETBYT ; GET MSB OF VALUE
|
||
12CB 8579 DOGET: STA VALUE+HI
|
||
12CD 20251B JSR GETBYT ; AND LSB
|
||
12D0 8578 STA VALUE+LO
|
||
12D2 4C660F JMP PUTVAL
|
||
|
||
12D5 ; ----
|
||
12D5 ; GETB
|
||
12D5 ; ----
|
||
|
||
12D5 ; RETURN ITEM [ARG2] IN BYTE-TABLE [ARG1]
|
||
|
||
12D5 20DC12 GGETB: JSR CALCB ; V-ADDR OF BYTE IN [VPC]
|
||
12D8 A900 LDA #0 ; MSB WILL BE ZERO
|
||
12DA F0EF BEQ DOGET
|
||
|
||
12DC ; --------------------
|
||
12DC ; CALC TABLE ADDRESSES
|
||
12DC ; --------------------
|
||
|
||
;CALCW: ASL ARG2+LO ; WORD-ALIGN TABLE INDEX
|
||
; ROL ARG2+HI
|
||
;
|
||
|
||
;***
|
||
12DC 4670 CALCB: LSR ARG2+HI ; BYTE-ALIGN TABLE INDEX
|
||
12DE 666F ROR ARG2+LO
|
||
12E0 A900 LDA #00
|
||
12E2 2A ROL A ; PUT CARRY IN A
|
||
12E3 8588 STA VPC0
|
||
;***
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 51
|
||
--- 2-OPS ---
|
||
|
||
;CALCB: LDA ARG2+LO ; CALC LSB OF V-ADDRESS
|
||
|
||
;***
|
||
12E5 A56F CALCW: LDA ARG2+LO ; CALC LSB OF V-ADDRESS
|
||
12E7 18 CLC
|
||
12E8 656D ADC ARG1+LO
|
||
12EA 8586 STA VPCL
|
||
12EC A570 LDA ARG2+HI ; ALSO CALC MSB
|
||
12EE 656E ADC ARG1+HI
|
||
12F0 8587 STA VPCH
|
||
|
||
12F2 A900 LDA #0
|
||
12F4 8589 STA VPCFLG ; INVALIDATE [VPC]
|
||
12F6 60 RTS
|
||
|
||
END
|
||
INCLUD OPSX.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 52
|
||
--- X-OPS ---
|
||
|
||
|
||
12F7 ; ----
|
||
12F7 ; CALL
|
||
12F7 ; ----
|
||
|
||
12F7 ; ENTRY: [NARGS] = 0
|
||
|
||
12F7 A20F GCALL: LDX #15 ; FILL THE ARG-TYPE LIST
|
||
12F9 A9C0 LDA #%11000000 ; WITH "NO MORE ARGS" BYTES
|
||
12FB 9DC00A GCL: STA CTYPES,X
|
||
12FE CA DEX
|
||
12FF 10FA BPL GCL
|
||
|
||
1301 A904 LDA #4
|
||
1303 8576 STA ADEX ; INIT BYTE INDEX
|
||
1305 8577 STA ADEX2 ; AND ARG BYTE COUNTER
|
||
|
||
1307 20D21A GCL0: JSR NEXTPC ; GRAB AN ARGUMENT BYTE
|
||
130A 8575 STA ABYTE ; SAVE IT HERE
|
||
130C 4C1513 JMP GCL2 ; SKIP OVER 1ST SHIFT
|
||
|
||
130F A575 GCL1: LDA ABYTE
|
||
1311 0A ASL A
|
||
1312 0A ASL A
|
||
1313 8575 STA ABYTE
|
||
|
||
1315 29C0 GCL2: AND #%11000000 ; MASK GARBAGE
|
||
1317 C9C0 CMP #%11000000 ; LAST ARGUMENT?
|
||
1319 F013 BEQ GCL3 ; YES, TIME TO DECODE ARGS
|
||
|
||
131B A66C LDX NARGS ; ELSE ADD THIS ARGUMENT
|
||
131D 9DC00A STA CTYPES,X ; TO THE ARG-TYPE LIST
|
||
1320 E66C INC NARGS ; UPDATE # ARGUMENTS
|
||
|
||
1322 C676 DEC ADEX ; THIS ARG BYTE EMPTY?
|
||
1324 D0E9 BNE GCL1 ; NO, GET NEXT ARG
|
||
|
||
1326 A904 LDA #4 ; ELSE RESET
|
||
1328 8576 STA ADEX ; ARGUMENT INDEX
|
||
132A C677 DEC ADEX2 ; DONE 4 ARG BYTES?
|
||
132C D0D9 BNE GCL0 ; NO, GET ANOTHER
|
||
|
||
132E ; [CTYPES] HAS LIST OF ARG TYPES
|
||
132E ; [NARGS] HAS # ARGUMENTS
|
||
|
||
132E A900 GCL3: LDA #0 ; RESET THE
|
||
1330 8576 STA ADEX ; ARGUMENT INDEX
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 53
|
||
--- X-OPS ---
|
||
|
||
1332 8577 STA ADEX2 ; AND STORAGE INDEX
|
||
|
||
1334 A56C LDA NARGS ; CONTINUE ONLY IF
|
||
1336 D005 BNE GCL4 ; [NARGS] <> 0
|
||
|
||
1338 ; *** ERROR #12: NO CALL ADDRESS ***
|
||
|
||
1338 A90C LDA #12
|
||
133A 4C5F1C JMP GERROR
|
||
|
||
133D A676 GCL4: LDX ADEX ; GET ARG INDEX
|
||
133F E46C CPX NARGS ; OUT OF ARGS YET?
|
||
1341 F02C BEQ GCL8 ; YES IF [X] = [NARGS]
|
||
|
||
1343 E676 INC ADEX ; ELSE UPDATE THE INDEX
|
||
1345 BDC00A LDA CTYPES,X ; GET A TYPE BYTE
|
||
1348 D006 BNE GCL5
|
||
134A 20EE0E JSR GETLNG ; 00 = LONG IMMEDIATE
|
||
134D 4C5D13 JMP GCL7
|
||
|
||
1350 C940 GCL5: CMP #%01000000
|
||
1352 D006 BNE GCL6
|
||
1354 20EA0E JSR GETSHT ; 01 = SHORT IMMEDIATE
|
||
1357 4C5D13 JMP GCL7
|
||
|
||
135A 20020F GCL6: JSR GETVAR ; ELSE GET VARIABLE
|
||
|
||
135D ; ARGUMENT IS NOW IN [VALUE]
|
||
|
||
135D A677 GCL7: LDX ADEX2 ; GET STORAGE INDEX
|
||
135F A578 LDA VALUE+LO ; MOVE LSB OF VALUE
|
||
1361 9DA00A STA CARGS,X ; INTO [CARGS]
|
||
1364 A579 LDA VALUE+HI ; ALSO MOVE
|
||
1366 9DA10A STA CARGS+1,X ; MSB
|
||
|
||
1369 E8 INX
|
||
136A E8 INX ; UPDATE THE
|
||
136B 8677 STX ADEX2 ; STORAGE INDEX
|
||
136D D0CE BNE GCL4 ; LOOP BACK FOR ANOTHER ARGUMENT
|
||
|
||
136F ; ARGUMENTS IN [CARGS], # ARGUMENTS IN [NARGS]
|
||
|
||
136F ADA00A GCL8: LDA CARGS+LO ; IS CALL ADDRESS
|
||
1372 0DA10A ORA CARGS+HI ; ZERO?
|
||
1375 D003 BNE DOCALL ; NO, CONTINUE
|
||
|
||
1377 4C600F JMP PUTBYT ; ELSE RETURN THE ZERO IN [A]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 54
|
||
--- X-OPS ---
|
||
|
||
|
||
137A A68F DOCALL: LDX OLDGSP ; SAVE [OLDGSP]
|
||
137C 8A TXA
|
||
137D 20420F JSR PSHXA
|
||
|
||
1380 A680 LDX GPCL ; AND [GPC]
|
||
1382 A581 LDA GPCH
|
||
1384 20420F JSR PSHXA
|
||
|
||
;***
|
||
1387 A682 LDX GPC0
|
||
1389 20420F JSR PSHXA
|
||
;***
|
||
|
||
|
||
138C ADA00A LDA CARGS+LO ; RESET [GPC]
|
||
138F 8580 STA GPCL
|
||
1391 ADA10A LDA CARGS+HI
|
||
1394 8581 STA GPCH
|
||
1396 A900 LDA #0
|
||
|
||
;***
|
||
1398 8582 STA GPC0 ; ALL FUNCTIONS START ON WORD BOUNDRIES
|
||
;***
|
||
|
||
139A 8583 STA GPCFLG ; AND ANNOUNCE CHANGE
|
||
|
||
139C 20D21A JSR NEXTPC ; GET # LOCALS IN FUNCTION
|
||
139F 8576 STA ADEX ; SAVE HERE FOR REFERENCE
|
||
13A1 8577 STA ADEX2 ; AND HERE FOR COUNTING
|
||
13A3 F027 BEQ CALL2 ; IF ZERO, JUMP AHEAD
|
||
|
||
13A5 A900 LDA #0
|
||
13A7 857C STA J+LO ; INIT LOOP INDEX
|
||
|
||
13A9 A47C CALL1: LDY J+LO
|
||
13AB BE800A LDX LOCALS,Y ; GET LSB OF LOCAL INTO [X]
|
||
13AE B9810A LDA LOCALS+1,Y ; GET MSB INTO [A]
|
||
13B1 20420F JSR PSHXA ; PUSH [X/A]
|
||
|
||
13B4 20D21A JSR NEXTPC ; GET MSB OF NEW LOCAL
|
||
13B7 A47C LDY J+LO
|
||
13B9 99810A STA LOCALS+1,Y ; MOVE MSB TO [LOCALS]
|
||
|
||
13BC 20D21A JSR NEXTPC ; GET LSB OF NEW LOCAL
|
||
13BF A47C LDY J+LO
|
||
13C1 99800A STA LOCALS,Y ; STORE LSB
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 55
|
||
--- X-OPS ---
|
||
|
||
|
||
13C4 C8 INY
|
||
13C5 C8 INY
|
||
13C6 847C STY J+LO ; UPDATE STORAGE INDEX
|
||
|
||
13C8 C677 DEC ADEX2 ; ANY MORE LOCALS?
|
||
13CA D0DD BNE CALL1 ; YES, LOOP BACK
|
||
|
||
13CC C66C CALL2: DEC NARGS ; ANY ARGS LEFT?
|
||
13CE F014 BEQ CALL4 ; NO, SCRAM NOW
|
||
|
||
13D0 ; PASS UP TO 15 [CARGS] TO [LOCALS]
|
||
|
||
13D0 A200 LDX #0 ; INIT LOOP INDEX
|
||
|
||
13D2 BDA20A CALL3: LDA CARGS+2,X ; GET LSB OF ARGUMENT
|
||
13D5 9D800A STA LOCALS,X ; ASSIGN TO A LOCAL
|
||
13D8 BDA30A LDA CARGS+3,X ; SAME FOR
|
||
13DB 9D810A STA LOCALS+1,X ; MSB
|
||
|
||
13DE E8 INX ; POINT TO THE
|
||
13DF E8 INX ; NEXT ENTRIES
|
||
|
||
13E0 C66C DEC NARGS ; OUT OF ARGS YET?
|
||
13E2 D0EE BNE CALL3 ; NO, KEEP LOOPING
|
||
|
||
13E4 ; PUSH # LOCALS
|
||
|
||
13E4 A676 CALL4: LDX ADEX ; # LOCALS KEPT HERE
|
||
13E6 8A TXA
|
||
13E7 20420F JSR PSHXA
|
||
|
||
13EA A58E LDA GSP ; REMEMBER WHERE WE ARE
|
||
13EC 858F STA OLDGSP
|
||
|
||
13EE 4CCF0D JMP MLOOP ; BACK TO MAIN LOOP
|
||
|
||
13F1 ; ---
|
||
13F1 ; PUT
|
||
13F1 ; ---
|
||
|
||
13F1 ; SET ITEM [ARG2] IN WORD-TABLE [ARG1] EQUAL TO [ARG3]
|
||
|
||
;GPUT: ASL ARG2+LO ; WORD-ALIGN
|
||
; ROL ARG2+HI ; [ARG2]
|
||
; JSR PCALC
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 56
|
||
--- X-OPS ---
|
||
|
||
;***
|
||
13F1 18 GPUT: CLC
|
||
|
||
|
||
13F2 200914 JSR PCALC ; GET ADDRESS INTO [I]
|
||
;***
|
||
|
||
|
||
13F5 A572 LDA ARG3+HI
|
||
13F7 917A STA (I),Y ; [Y] = 0
|
||
13F9 C8 INY
|
||
13FA D008 BNE PUTLSB ; BRANCH ALWAYS
|
||
|
||
13FC ; ----
|
||
13FC ; PUTB
|
||
13FC ; ----
|
||
|
||
13FC ; SET ITEM [ARG2] IN BYTE-TABLE [ARG1] EQUAL TO [ARG3]
|
||
|
||
;GPUTB: JSR PCALC
|
||
|
||
;***
|
||
13FC 18 GPUTB: CLC
|
||
|
||
13FD 4670 LSR ARG2+HI ; DIVIDE BY TWO TO ADJUST FOR BYTE POINTING
|
||
13FF 666F ROR ARG2+LO ; LEAVE BIT 0 IN CARRY FOR PCALC
|
||
1401 200914 JSR PCALC
|
||
;***
|
||
|
||
1404 A571 PUTLSB: LDA ARG3+LO
|
||
1406 917A STA (I),Y
|
||
1408 60 RTS
|
||
|
||
1409 ; ------------------
|
||
1409 ; CALC "PUT" ADDRESS
|
||
1409 ; ------------------
|
||
|
||
1409 A000 PCALC: LDY #0 ; FOR INDEXING
|
||
|
||
;***
|
||
140B 9001 BCC PCALC1 ; TAKE CARE OF CARRY FROM GPUTB
|
||
140D C8 INY
|
||
;***
|
||
140E A56F PCALC1: LDA ARG2+LO ; ADD ITEM OFFSET
|
||
1410 18 CLC ; TO TABLE ADDRESS
|
||
1411 656D ADC ARG1+LO ; FIRST LSB
|
||
1413 857A STA I+LO
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 57
|
||
--- X-OPS ---
|
||
|
||
|
||
1415 A570 LDA ARG2+HI ; THEN MSB
|
||
1417 656E ADC ARG1+HI
|
||
|
||
1419 C593 ICENT: CMP GPURE ; IS CODE IN G-PRELOAD? (ENTRY FOR ICALC)
|
||
141B 9014 BCC USEGP ; YES, OK TO CHANGE
|
||
|
||
141D C594 CMP ISTART ; IS IT BELOW THE I-FILE?
|
||
141F 9019 BCC PURERR ; CAN'T CHANGE PURE CODE!
|
||
|
||
1421 C595 CMP IPURE ; IS IT ABOVE THE I-PRELOAD?
|
||
1423 B015 BCS PURERR ; YES, UNCHANGEABLE!
|
||
|
||
1425 ; POINT TO BYTE IN I-PRELOAD
|
||
|
||
1425 38 SEC
|
||
1426 E594 SBC ISTART ; STRIP OF V-OFFSET
|
||
|
||
;***
|
||
1428 067A ASL I+LO ; *2
|
||
142A 2A ROL A
|
||
142B ****
|
||
|
||
142B 18 CLC
|
||
142C 6592 ADC ICODE+HI ; MAKE IT ABSOLUTE
|
||
142E 857B STA I+HI
|
||
|
||
;***
|
||
1430 60 PCALC2: RTS
|
||
|
||
;***
|
||
|
||
; RTS
|
||
|
||
1431 ; POINT TO BYTE IN G-PRELOAD
|
||
;***
|
||
1431 067A USEGP: ASL I+LO ; * 2 FOR 512 BYTE PAGES
|
||
1433 2A ROL A
|
||
;***
|
||
1434 18 CLC
|
||
1435 6590 ADC GCODE ; CALC ABSOLUTE ADDR
|
||
1437 857B STA I+HI ; IN G-PRELOAD
|
||
1439 60 RTS
|
||
|
||
143A ; *** ERROR #9: PURITY VIOLATION ***
|
||
|
||
143A A909 PURERR: LDA #9
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 58
|
||
--- X-OPS ---
|
||
|
||
143C 4C5F1C JMP GERROR
|
||
|
||
143F ; ------
|
||
143F ; RANDOM
|
||
143F ; ------
|
||
|
||
143F ; RETURN A RANDOM VALUE BETWEEN 1 AND [ARG1]
|
||
|
||
143F A56D GRAND: LDA ARG1+LO ; MAKE [ARG1]
|
||
1441 856F STA ARG2+LO ; A DIVISOR
|
||
1443 A56E LDA ARG1+HI
|
||
1445 8570 STA ARG2+HI
|
||
|
||
1447 200A1D JSR DORAND ; GET RANDOM BYTES
|
||
144A 866D STX ARG1+LO ; INTO [A] & [X]
|
||
144C 297F AND #%01111111 ; MAKE IT A POSITIVE
|
||
144E 856E STA ARG1+HI ; DIVIDEND
|
||
|
||
1450 207711 JSR DIVIDE ; SIGNED DIVISION
|
||
|
||
1453 A5A6 LDA REMAIN+LO ; GRAB THE REMAINDER
|
||
1455 8578 STA VALUE+LO
|
||
1457 A5A7 LDA REMAIN+HI
|
||
1459 8579 STA VALUE+HI
|
||
|
||
145B 20FF0F JSR INCVAL ; INCREMENT IT
|
||
145E 4C660F JMP PUTVAL ; AND RETURN THE RESULT
|
||
|
||
|
||
1461 ;-------------------------------------
|
||
1461 ; GITER: INITIALIZE ITERATION TABLE AT
|
||
1461 ; WORD-ADDRESS ARG1
|
||
1461 ;-------------------------------------
|
||
|
||
1461 A900 GITER: LDA #00 ; SET ARG4=0 FOR ICALC
|
||
1463 8573 STA ARG4+LO
|
||
1465 8574 STA ARG4+HI
|
||
|
||
1467 A56E LDA ARG1+HI ; MOVE ARG1 TO ARG3
|
||
1469 8572 STA ARG3+HI
|
||
146B A56D LDA ARG1+LO
|
||
146D 8571 STA ARG3+LO
|
||
146F 208918 JSR ICALC ; THIS WILL ALSO CHECK PURITY VIOLATIONS
|
||
|
||
1472 B17A LDA (I),Y ; GET NUMBER OF ENTRIES IN TABLE
|
||
1474 85BE STA ITICN
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 59
|
||
--- X-OPS ---
|
||
|
||
1476 C8 INY
|
||
1477 98 TYA ; INIT ICOUNT Y=1 A=1
|
||
1478 917A STA (I),Y
|
||
|
||
147A E673 INC ARG4+LO ; POINT TO FIRST WORD OF FIRST ENTRY
|
||
|
||
147C 208918 GITER1: JSR ICALC
|
||
147F B17A LDA (I),Y ; HIGH BYTE OF ICON ADDRESS
|
||
1481 48 PHA ; SAVE
|
||
1482 C8 INY ; =1
|
||
1483 B17A LDA (I),Y ; LOWBYTE OF ADDRESS
|
||
1485 AA TAX
|
||
1486 68 PLA
|
||
1487 20361A JSR GETI ; GET ICON INFORMATION
|
||
|
||
148A A900 LDA #0
|
||
148C A006 LDY #6
|
||
148E 917A STA (I),Y ; SET NEGATE FOR POSITIVE DISPLAY
|
||
1490 C8 INY ; =7
|
||
1491 A901 LDA #1
|
||
1493 917A STA (I),Y ; SET FIRST ITERATION=1
|
||
|
||
1495 C8 INY ; =8
|
||
1496 A5CF LDA BSET
|
||
1498 917A STA (I),Y ; SAVE BSET
|
||
149A C8 INY ; =9
|
||
149B A5BD LDA ITERS
|
||
149D 917A STA (I),Y ; SAVE # OF ITERS
|
||
|
||
149F C8 INY ; =10
|
||
14A0 A5B5 LDA IX1
|
||
14A2 917A STA (I),Y ; SAVE ICON WIDTH
|
||
14A4 C8 INY ; =11
|
||
14A5 A5B7 LDA IY1
|
||
14A7 917A STA (I),Y ; SAVE ICON HEIGHTH
|
||
|
||
14A9 207D18 JSR NXTENT
|
||
14AC C6BE DEC ITICN
|
||
14AE D0CC BNE GITER1
|
||
14B0 60 RTS
|
||
|
||
|
||
14B1 ;------------------------
|
||
14B1 ; GDUMP : NOT IMPLIMENTED
|
||
14B1 ; RETURN 0
|
||
14B1 ;------------------------
|
||
14B1 4C5E0F GDUMP: JMP RET0
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 60
|
||
--- X-OPS ---
|
||
|
||
|
||
14B4 ;-------------------------
|
||
14B4 ; GLOAD : NOT IMPLIMENTED
|
||
14B4 ; RETURN 0
|
||
14B4 ;------------------------
|
||
14B4 4C5E0F GLOAD: JMP RET0
|
||
|
||
END
|
||
INCLUD IO.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 61
|
||
--- I/O ROUTINES ---
|
||
|
||
|
||
14B7 ; -----
|
||
14B7 ; SHOWN
|
||
14B7 ; -----
|
||
|
||
14B7 ; DISPLAY NEGATIVE ICON [ARG3] AT X=[ARG1], Y=[ARG2]
|
||
14B7 ; IF [ARG4] IS GIVEN IT POINTS TO THE MASK TO BE USED
|
||
|
||
|
||
14B7 A9FF GSHOWN: LDA #$FF
|
||
14B9 85E9 STA NEGATE ; SET NEGATE FLAG
|
||
14BB D004 BNE SHOWI ; AND DO A "SHOWI"
|
||
|
||
14BD ; -----
|
||
14BD ; SHOWI
|
||
14BD ; -----
|
||
|
||
14BD ; DISPLAY ICON [ARG3] AT X=[ARG1], Y=[ARG2]
|
||
14BD ; IF [ARG4] IS GIVEN IT POINTS TO THE MASK TO BE USED
|
||
|
||
14BD A900 GSHOWI: LDA #0
|
||
14BF 85E9 STA NEGATE ; DISABLE NEGATE
|
||
|
||
14C1 ; ****************NEW ROUTINE********************
|
||
14C1 A900 SHOWI: LDA #0
|
||
14C3 85E3 STA MSKFLG ; DISABLE MASKING UNTIL FURTHER NOTICE
|
||
14C5 A56C LDA NARGS
|
||
14C7 C903 CMP #3
|
||
14C9 F019 BEQ NOMASK ; DO THE NORMAL THING
|
||
|
||
14CB A673 LDX ARG4+LO ; GET MASK INFO
|
||
14CD A574 LDA ARG4+HI
|
||
14CF 201B1A JSR ISU ; THIS ENTRY INTO [ISETUP] WILL PUT
|
||
14D2 ; THE DATA FOR ICON [ARG4] INTO
|
||
14D2 ; IX2,IY2,IADR2 ETC.
|
||
14D2 ; AND RETURN WITH DATA FROM ICON [ARG3]
|
||
14D2 ; IN IX1,IY1 ETC.
|
||
14D2 ; * NOTE IT WILL NOT DETECT DIFFERENT *
|
||
14D2 ; * BLOCKSETS IT USES THE BSET FROM *
|
||
14D2 ; * [ARG3] *
|
||
14D2 A5B5 LDA IX1
|
||
14D4 C5B6 CMP IX2 ; IF THE WIDTH AND HEIGHT ARE NOT
|
||
14D6 D02E BNE DRAWEX ; DO NOTHING
|
||
14D8 A5B7 LDA IY1
|
||
14DA C5B8 CMP IY2
|
||
14DC D028 BNE DRAWEX
|
||
14DE A9FF LDA #$FF ; SET MASK FLAG
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 62
|
||
--- I/O ROUTINES ---
|
||
|
||
14E0 85E3 STA MSKFLG
|
||
14E2 D007 BNE ITENT ; GOTO RIGHT PLACE
|
||
|
||
14E4 A671 NOMASK: LDX ARG3+LO ; SET UP
|
||
14E6 A572 LDA ARG3+HI ; BSET, ITERS, IX1, IY1, IADR1+LO, IADR1+HI
|
||
14E8 20361A JSR GETI
|
||
|
||
14EB A900 ITENT: LDA #0
|
||
14ED 85C4 STA TOPCUT ; ZERO THIS
|
||
14EF 85AE STA MUH ; THIS TOO
|
||
14F1 85C5 STA SIDCUT ; AND THIS
|
||
|
||
; STA MDYCUT ; AND THIS
|
||
|
||
14F3 85C7 STA MDXCUT ; AND THIS
|
||
|
||
|
||
14F5 A66F LDX ARG2+LO ; ICON Y1 POS LO
|
||
14F7 A570 LDA ARG2+HI
|
||
14F9 F01B BEQ DRAWI1 ; ICON STARTS ON WINDOW PAGE (YPOS= 00 XX)
|
||
|
||
14FB C9FF CMP #$FF
|
||
14FD D007 BNE DRAWEX ; ICON WILL NOT BE DISPLAYED
|
||
|
||
14FF ;STARTS ON PAGE BEFORE WINDOW PAGE
|
||
|
||
14FF 8A TXA ; PUT LO YPOS IN <A>
|
||
1500 49FF EOR #$FF ; C=1 FROM CMP #$FF
|
||
1502 65CA ADC WINDY1 ; FIND DISTANCE FROM ICON Y1-> WINDOW Y1
|
||
1504 9017 BCC DRAWI2
|
||
1506 ; FALL THRU DISTANCE > MAX SIZE OF 255
|
||
|
||
1506 60 DRAWEX: RTS ; GENERAL PURPOUS EXIT FROM DRAW ICON
|
||
|
||
1507 A5CC DRAWI3: LDA WINDY2 ; * [WINDY2] IS ONE GREATER THAN LAST *
|
||
1509 38 SEC ; * LINE OF WINDOW TO DISPLAY *
|
||
150A E56F SBC ARG2+LO ; * IF THIS MAKES A DIFFERANCE TAKE *
|
||
150C 90F8 BCC DRAWEX ; AMOUNT TO CUT FROM ROWS DISPLAYED
|
||
150E C5B7 CMP IY1 ; * THE SEC MIGHT FIX *
|
||
1510 B00D BCS DRAWI4
|
||
1512 85B7 STA IY1 ; EXIT WHEN ICON STARTS BELOW WINDOW
|
||
1514 9009 BCC DRAWI4
|
||
|
||
1516 ; THE ABOVE SECTION OCCURS IF THE ICON STARTS INDSIDE THE WINDOW
|
||
1516 ; AND FINDS THE NUMBER ROWS TO DRAW
|
||
|
||
1516 38 DRAWI1: SEC ; ICON ON ZERO PAGE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 63
|
||
--- I/O ROUTINES ---
|
||
|
||
1517 A5CA LDA WINDY1
|
||
1519 E56F SBC ARG2+LO ; FIND (WINDY1-ICONY1)
|
||
151B 90EA BCC DRAWI3 ; IF NEGATIVE ICON STARTS AFTER WINDOW Y1
|
||
151D 85C4 DRAWI2: STA TOPCUT ; OTHERWISE CUT THIS AMOUNT FROM TOP OF ICON
|
||
|
||
151F A5B7 DRAWI4: LDA IY1 ; HEIGHT OF ICON
|
||
1521 38 SEC
|
||
1522 E5C4 SBC TOPCUT ; DO CUT
|
||
1524 F0E0 BEQ DRAWEX
|
||
1526 90DE BCC DRAWEX ; NO ICON LEFT TO DRAW. GOOD BYE
|
||
|
||
1528 85BB STA YDEX1 ; *** NEED TO USE OTHER NAME???? ***
|
||
152A E5CD SBC WINDH ; *(+-1) SET IN WINDSET (HEIGHT OF WINDOW)
|
||
152C 9004 BCC DRAWI5 ; ICON SMALLER THAN WINDOW (DISPLAY ALL)
|
||
|
||
152E A5CD LDA WINDH ; DISPLAY A WINDOWS WORTH OF ICON
|
||
1530 85BB STA YDEX1
|
||
|
||
|
||
1532 ; MULTIPLY TOPCUT AND ICON WIDTH, ADD TO ICON POINTER TO POINT
|
||
1532 ; AT FIRST DISPLAYED ROW BLOCK
|
||
|
||
1532 A5C4 DRAWI5: LDA TOPCUT ; * NOT NEEDED IF NOT CHANGED LATER *
|
||
1534 85AC STA MUSHFT ; * JUST USE TOPCUT *
|
||
|
||
1536 18 CLC
|
||
1537 656F ADC ARG2+LO ; CHANGE STARY YPOS OF ICON TO REFLECT
|
||
1539 85C2 STA YPOS+LO ; TOPCUT
|
||
|
||
153B A007 LDY #7 ; SHIFT COUNTER
|
||
153D A6B5 LDX IX1 ; WIDTH COEFICIANT
|
||
153F CA DEX ; LESS ONE SO ADC C=0 SAME AS ADC C=1
|
||
1540 8A DRAWI6: TXA ; GET IX1 BACK IN <A> FOR ADD
|
||
1541 46AC LSR MUSHFT ; SHIFT BIT 0 INTO <C>
|
||
1543 9004 BCC DRAWI7 ; C=0 SAME AS ADDING 0
|
||
1545 65AE ADC MUH
|
||
1547 85AE STA MUH ; ADD IXA TO TOTAL
|
||
1549 66AE DRAWI7: ROR MUH ; MUTIPLY BY 2
|
||
154B 66AD ROR MUL
|
||
154D 88 DEY
|
||
154E 10F0 BPL DRAWI6 ; DO 8 TIMES (8 BITS) GET IT?
|
||
|
||
; LDA IADR1+LO
|
||
; CLC
|
||
; ADC MUL ; ADD OFFSET INTO ICON
|
||
; STA IADR1+LO
|
||
; LDA IADR1+HI
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 64
|
||
--- I/O ROUTINES ---
|
||
|
||
; ADC MUH
|
||
; STA IADR1+HI
|
||
|
||
;***
|
||
1550 A5AE LDA MUH
|
||
1552 A6AD LDX MUL
|
||
1554 202F19 JSR ADDIA1
|
||
|
||
1557 A5E3 LDA MSKFLG ; IF MASK ENABLED
|
||
1559 F005 BEQ NOMSK1
|
||
155B A5AE LDA MUH ; X IS STILL MUL
|
||
155D 200619 JSR ADDIA2
|
||
;***
|
||
|
||
1560 ; COMPUTE THE DISPLAYED WIDTH AND THE IXSKIP
|
||
|
||
1560 A5B5 NOMSK1: LDA IX1 ; KLUDGE
|
||
1562 85C7 STA MDXCUT
|
||
|
||
1564 A66D LDX ARG1+LO ; ICON X CORDINATE
|
||
1566 A56E LDA ARG1+HI
|
||
1568 F01B BEQ DRAWI8 ; ICON STARTS ON WINDOW PAGE (XPOS= 00 XX)
|
||
|
||
156A C9FF CMP #$FF
|
||
156C D007 BNE DRAWE2 ; ICON WILL NOT BE DISPLAYED
|
||
|
||
156E ; STARTS ON PAGE BEFORE WINDOW PAGE
|
||
|
||
156E 8A TXA ; PUT LO XPOS IN <A>
|
||
156F 49FF EOR #$FF ; C=1 FROM CMP #$FF
|
||
1571 65C9 ADC WINDX1 ; FIND DISTANCE FROM ICON X1-> WINDOW X1
|
||
1573 9017 BCC DRAWI9
|
||
1575 ; FALL THRU DISTANCE > MAX ICON SIZE OF 255
|
||
|
||
1575 60 DRAWE2: RTS ; AN EXIT FROM DRAW ICON
|
||
|
||
1576 A5CB DRAWIA: LDA WINDX2 ; ICON STARTS INSIDE WINDOW
|
||
1578 38 SEC
|
||
1579 E56D SBC ARG1+LO ; CHECK IF ICON STARTS TO RIGHT OF WINDOW
|
||
157B 90F8 BCC DRAWE2 ; FOR LATER
|
||
157D C5B5 CMP IX1
|
||
157F B00D BCS DRAWIB
|
||
1581 85B5 STA IX1 ; STARTS TO RIGHT DON T BOTHER
|
||
1583 9009 BCC DRAWIB
|
||
|
||
1585 A5C9 DRAWI8: LDA WINDX1 ; ICON STARTS ON ZERO PAGE
|
||
1587 38 SEC
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 65
|
||
--- I/O ROUTINES ---
|
||
|
||
1588 E56D SBC ARG1+LO ; FIND (WINDX2-ICONX1)
|
||
158A 90EA BCC DRAWIA ; IF NEGATIVE ICON STARTS AFTER WINDOW X1
|
||
158C 85C5 DRAWI9: STA SIDCUT ; OTHERWISE CUT THIS FROF LEFT OF ICON
|
||
|
||
158E A5B5 DRAWIB: LDA IX1 ; WIDTH OF ICON
|
||
1590 38 SEC
|
||
1591 E5C5 SBC SIDCUT ; DO CUT
|
||
1593 F0E0 BEQ DRAWE2
|
||
1595 90DE BCC DRAWE2 ; NO ICON TO DRAW BYE BYE
|
||
|
||
1597 85B9 STA XDEX1
|
||
1599 E5CE SBC WINDW ; IF ICON SMALLER THAN WINDOW DISPLAY ALL
|
||
159B 9004 BCC DRAWIC
|
||
|
||
159D A5CE LDA WINDW ; OTHERWISE DISPLAY WINDOW WIDTH OF ICON
|
||
159F 85B9 STA XDEX1
|
||
|
||
;DRAWIC: LDA IADR1+LO
|
||
; CLC
|
||
; ADC SIDCUT
|
||
; STA IADR1+LO
|
||
; BCC DRAWID
|
||
; INC IADR1+HI
|
||
|
||
;***
|
||
15A1 A900 DRAWIC: LDA #00
|
||
15A3 A6C5 LDX SIDCUT
|
||
15A5 202F19 JSR ADDIA1
|
||
;***
|
||
15A8 A5E3 LDA MSKFLG ; IS MASK ENABLED
|
||
15AA F005 BEQ DRAWID
|
||
15AC A900 LDA #00 ; X IS STILL SIDCUT
|
||
15AE 200619 JSR ADDIA2
|
||
|
||
|
||
15B1 A5C7 DRAWID: LDA MDXCUT
|
||
15B3 38 SEC
|
||
15B4 E5B9 SBC XDEX1
|
||
15B6 85C6 STA IXSKIP
|
||
|
||
15B8 A5B9 LDA XDEX1
|
||
15BA 85B5 STA IX1 ; SET THE COUNTER REFRESH VALUE
|
||
|
||
15BC A56D LDA ARG1+LO
|
||
15BE 18 CLC
|
||
15BF 65C5 ADC SIDCUT
|
||
15C1 85C0 STA XPOS+LO
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 66
|
||
--- I/O ROUTINES ---
|
||
|
||
15C3 85E5 STA XPSAV+LO
|
||
|
||
15C5 ;**************************************
|
||
|
||
15C5 A5CF LDA BSET ; GET REQUIRED BLOCK SET INTO RAM
|
||
15C7 204919 JSR GETBS
|
||
|
||
15CA A5E3 LDA MSKFLG ; IF ENABLED GO DO THE MASK THING
|
||
15CC D042 BNE DOMASK
|
||
|
||
15CE ; DRAW THE ICON ITERATION AT [IADR1]
|
||
|
||
15CE A5AF DRAW: LDA IADR1+LO ; POINT [VPC] TO NEXT ICON BYTE
|
||
15D0 8586 STA VPCL
|
||
15D2 A5B0 LDA IADR1+HI
|
||
15D4 8587 STA VPCH
|
||
;***
|
||
15D6 A5B1 LDA IADR10
|
||
15D8 8588 STA VPC0
|
||
;***
|
||
|
||
|
||
15DA A900 LDA #0
|
||
15DC 8589 STA VPCFLG ; INVALIDATE [VPC]
|
||
|
||
15DE 20251B JSR GETBYT ; GET BLOCK ID INTO [A]
|
||
|
||
15E1 20C019 JSR GETBLK ; GET BLOCK [A] INTO [BLOCK]
|
||
15E4 A6C0 LDX XPOS+LO ; GET SCREEN COORDINATES
|
||
15E6 A5C2 LDA YPOS+LO ; INTO [X] AND [A]
|
||
15E8 20D21D JSR DUMP ; DUMP [BLOCK] AT X=[X], Y=[A]
|
||
|
||
15EB C6B9 DEC XDEX1 ; DEC INDEX OF DISPLAYED WIDTH
|
||
15ED F008 BEQ CLPRI2 ; OUT OF COLUMNS: DO NEXT ROW
|
||
|
||
15EF E6C0 INC XPOS+LO ; INCREMENT X CORDINATE
|
||
|
||
;***
|
||
15F1 202019 JSR INCIA1
|
||
;***
|
||
15F4 4CCE15 JMP DRAW
|
||
|
||
|
||
15F7 A5B5 CLPRI2: LDA IX1 ; REFRESH
|
||
15F9 85B9 STA XDEX1 ; X-COUNT
|
||
|
||
15FB A5E5 LDA XPSAV+LO ; RESET X-POS
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 67
|
||
--- I/O ROUTINES ---
|
||
|
||
15FD 85C0 STA XPOS+LO
|
||
;***
|
||
15FF A900 LDA #0
|
||
1601 A6C6 LDX IXSKIP
|
||
1603 202F19 JSR ADDIA1
|
||
1606 202019 JSR INCIA1
|
||
;***
|
||
|
||
1609 E6C2 INC YPOS+LO ; INCREMENT
|
||
160B C6BB DEC YDEX1 ; OUT OF Y'S YET?
|
||
160D D0BF BNE DRAW ; NO, KEEP DUMPING
|
||
160F 60 RTS ; TILL EMPTY
|
||
|
||
|
||
|
||
|
||
1610 ; DRAW THE ICON ITERATION AT [IADR1] WITH MASK AT [IADR2]
|
||
|
||
1610 A5B2 DOMASK: LDA IADR2+LO ; POINT [VPC] TO NEXT MASK BYTE
|
||
1612 8586 STA VPCL
|
||
1614 A5B3 LDA IADR2+HI
|
||
1616 8587 STA VPCH
|
||
1618 A5B4 LDA IADR20
|
||
161A 8588 STA VPC0
|
||
|
||
161C A5E9 LDA NEGATE ; SAVE NEGATE STATUS
|
||
161E 48 PHA
|
||
|
||
161F A900 LDA #00
|
||
1621 8589 STA VPCFLG ; INVAL FLAG
|
||
1623 85E9 STA NEGATE ; NEVER NEGATE THE MASK
|
||
|
||
1625 20251B JSR GETBYT ; GET MASK BLOCK
|
||
1628 20C019 JSR GETBLK ; GET MASK INTO [BLOCK]
|
||
162B 207E16 JSR B2MASK ; COPY [BLOCK] INTO [MASK]
|
||
|
||
|
||
162E A5AF LDA IADR1+LO ; POINT [VPC] TO NEXT ICON BYTE
|
||
1630 8586 STA VPCL
|
||
1632 A5B0 LDA IADR1+HI
|
||
1634 8587 STA VPCH
|
||
1636 A5B1 LDA IADR10
|
||
1638 8588 STA VPC0
|
||
|
||
163A 68 PLA ; RESTORE THE NEGATE
|
||
163B 85E9 STA NEGATE
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 68
|
||
--- I/O ROUTINES ---
|
||
|
||
163D A900 LDA #0
|
||
163F 8589 STA VPCFLG ; INVALIDATE [VPC]
|
||
|
||
1641 20251B JSR GETBYT ; GET BLOCK ID INTO [A]
|
||
|
||
1644 20C019 JSR GETBLK ; GET BLOCK [A] INTO [BLOCK]
|
||
1647 A6C0 LDX XPOS+LO ; GET SCREEN COORDINATES
|
||
1649 A5C2 LDA YPOS+LO ; INTO [X] AND [A]
|
||
164B 20F51D JSR DMPMSK ; DRAW [BLOCK] AGAINST [MASK] AT X=[X], Y=[A]
|
||
|
||
164E C6B9 DEC XDEX1 ; DEC INDEX OF DISPLAYED WIDTH
|
||
1650 F00B BEQ CLPRIA ; OUT OF COLUMNS: DO NEXT ROW
|
||
|
||
1652 E6C0 INC XPOS+LO ; INCREMENT X CORDINATE
|
||
|
||
;***
|
||
1654 202019 JSR INCIA1
|
||
1657 20F718 JSR INCIA2
|
||
;***
|
||
165A 4C1016 JMP DOMASK
|
||
|
||
|
||
165D A5B5 CLPRIA: LDA IX1 ; REFRESH
|
||
165F 85B9 STA XDEX1 ; X-COUNT
|
||
|
||
1661 A5E5 LDA XPSAV+LO ; RESET X-POS
|
||
1663 85C0 STA XPOS+LO
|
||
;***
|
||
1665 A900 LDA #0
|
||
1667 A6C6 LDX IXSKIP
|
||
1669 202F19 JSR ADDIA1
|
||
166C 202019 JSR INCIA1
|
||
166F A900 LDA #0
|
||
1671 200619 JSR ADDIA2
|
||
1674 20F718 JSR INCIA2
|
||
;***
|
||
|
||
1677 E6C2 INC YPOS+LO ; INCREMENT
|
||
1679 C6BB DEC YDEX1 ; OUT OF Y'S YET?
|
||
167B D093 BNE DOMASK ; NO, KEEP DUMPING
|
||
167D 60 RTS ; TILL EMPTY
|
||
|
||
167E ; ------
|
||
167E ; B2MASK
|
||
167E ; ------
|
||
167E A207 B2MASK: LDX #7
|
||
1680 B5D3 B2MLP: LDA BLOCK,X
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 69
|
||
--- I/O ROUTINES ---
|
||
|
||
1682 95DB STA MASK,X
|
||
1684 CA DEX
|
||
1685 10F9 BPL B2MLP
|
||
1687 60 RTS
|
||
|
||
1688 ; ----
|
||
1688 ; SETI
|
||
1688 ; ----
|
||
|
||
1688 ; COPY ICON [ARG3] INTO ICON [ARG4] WITH
|
||
1688 ; TOP LEFT CORNER AT X=[ARG1], Y=[ARG2];
|
||
1688 ; RETURN ZERO IF RANGE ERROR, ONE IF OKAY
|
||
|
||
1688 20101A GSETI: JSR ISETUP ; GET STATS OF SOURCE & DEST
|
||
168B 20921A JSR DOFIT ; WILL SOURCE FIT IN DEST?
|
||
168E 9003 BCC SI0 ; CARRY CLEAR IF OKAY
|
||
1690 4C5E0F JMP RET0 ; ELSE RETURN A ZERO
|
||
|
||
1693 ; [IADR2] HAS ABS ADDR OF SUB-ICON
|
||
1693 ; [VPC] POINTS TO 1ST BYTE OF SOURCE ICON
|
||
|
||
1693 A900 SI0: LDA #0
|
||
1695 857A STA I+LO ; INIT X-ROW POINTER
|
||
|
||
1697 20251B SI1: JSR GETBYT ; GET A BYTE FROM SOURCE
|
||
169A A47A LDY I+LO
|
||
169C 91B2 STA (IADR2),Y ; STORE IN DEST
|
||
|
||
169E E67A INC I+LO ; UPDATE ROW POINTER
|
||
|
||
16A0 C6B9 DEC XDEX1 ; OUT OF SOURCE X'S YET?
|
||
16A2 D0F3 BNE SI1 ; NO, MOVE ANOTHER BYTE
|
||
16A4 A5B5 LDA IX1 ; ELSE REFRESH
|
||
16A6 85B9 STA XDEX1 ; X-COUNT
|
||
|
||
16A8 A5B6 LDA IX2 ; GET X-SIZE OF DEST
|
||
16AA 18 CLC
|
||
16AB 65B2 ADC IADR2+LO ; ADD TO BASE ADDR OF SUB-ICON
|
||
16AD 85B2 STA IADR2+LO ; TO GET ADDR OF NEXT SUB-ROW
|
||
16AF 9002 BCC SI3
|
||
16B1 E6B3 INC IADR2+HI
|
||
|
||
16B3 C6BB SI3: DEC YDEX1 ; OUT OF Y'S YET?
|
||
16B5 D0DC BNE SI0 ; RESET X-INDEX AND LOOP TILL EMPTY
|
||
|
||
16B7 A901 LDA #1
|
||
16B9 4C600F JMP PUTBYT ; RETURN A 1 FOR SUCCESS
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 70
|
||
--- I/O ROUTINES ---
|
||
|
||
|
||
16BC ; -----
|
||
16BC ; SWAPI
|
||
16BC ; -----
|
||
|
||
16BC ; SAME AS "SETI" EXCEPT ICON [ARG4] SUB-DATA IS COPIED
|
||
16BC ; BACK INTO ICON [ARG3]
|
||
|
||
16BC 20101A GSWAPI: JSR ISETUP
|
||
16BF A5B0 LDA IADR1+HI ; MAKE SURE SOURCE ICON
|
||
16C1 C595 CMP IPURE ; IS IN I-PRELOAD
|
||
16C3 9005 BCC GSW0 ; ERROR IF NOT
|
||
|
||
16C5 ; *** ERROR #14: PURITY VIOLATION (SETI/SWAPI) ***
|
||
|
||
16C5 A90E PRERR2: LDA #14
|
||
16C7 4C5F1C JMP GERROR
|
||
|
||
16CA 20921A GSW0: JSR DOFIT ; WILL SOURCE FIT IN DEST?
|
||
16CD 9003 BCC GSW1 ; CARRY CLEAR IF OKAY
|
||
16CF 4C5E0F JMP RET0 ; ELSE RETURN A ZERO
|
||
|
||
16D2 A5B0 GSW1: LDA IADR1+HI ; MAKE [IADR1] ABSOLUTE
|
||
16D4 38 SEC
|
||
16D5 E594 SBC ISTART ; STRIP OFF VIRTUAL OFFSET
|
||
;***
|
||
16D7 46B1 LSR IADR10
|
||
16D9 26AF ROL IADR1+LO
|
||
16DB 2A ROL A
|
||
;***
|
||
16DC 18 CLC
|
||
16DD 6592 ADC ICODE+HI ; ADD BASE ADDR OF I-PRELOAD
|
||
16DF 85B0 STA IADR1+HI ; LSB NEEDN'T CHANGE
|
||
|
||
16E1 A900 GSW2: LDA #0 ; INIT ROW INDEX
|
||
16E3 857A STA I+LO
|
||
|
||
16E5 A47A GSW3: LDY I+LO ; GET ROW INDEX
|
||
16E7 B1AF LDA (IADR1),Y ; GET BYTE FROM SOURCE ICON
|
||
16E9 857B STA I+HI ; SAVE IT HERE
|
||
16EB B1B2 LDA (IADR2),Y ; GET BYTE FROM DEST ICON
|
||
16ED 91AF STA (IADR1),Y ; MOVE IT TO SOURCE ICON
|
||
16EF A57B LDA I+HI ; RETRIEVE SOURCE BYTE
|
||
16F1 91B2 STA (IADR2),Y ; AND MOVE IT TO DEST ICON
|
||
|
||
16F3 E67A INC I+LO ; UPDATE ROW INDEX
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 71
|
||
--- I/O ROUTINES ---
|
||
|
||
16F5 C6B9 DEC XDEX1 ; OUT OF X'S YET?
|
||
16F7 D0EC BNE GSW3 ; NO, KEEP LOOPING
|
||
16F9 A5B5 LDA IX1 ; ELSE REFRESH X-COUNT
|
||
16FB 85B9 STA XDEX1
|
||
|
||
16FD A5B6 LDA IX2 ; ADD X-SIZE OF DEST
|
||
16FF 18 CLC ; TO BASE ADDR OF SUB-ICON
|
||
1700 65B2 ADC IADR2+LO ; TO GET ADDR OF NEXT ROW
|
||
1702 85B2 STA IADR2+LO
|
||
1704 9002 BCC GSW4
|
||
1706 E6B3 INC IADR2+HI
|
||
|
||
1708 A5B5 GSW4: LDA IX1 ; ADD X-SIZE OF SOURCE
|
||
170A 18 CLC ; TO BASE ADDR OF SOURCE
|
||
170B 65AF ADC IADR1+LO ; TO GET ADDR OF NEXT ROW
|
||
170D 85AF STA IADR1+LO
|
||
170F 9002 BCC GSW5
|
||
1711 E6B0 INC IADR1+HI
|
||
|
||
1713 C6BB GSW5: DEC YDEX1 ; OUT OF Y'S YET?
|
||
1715 D0CA BNE GSW2 ; RESET ROW INDEX & LOOP TILL EMPTY
|
||
|
||
1717 A901 LDA #1
|
||
1719 4C600F JMP PUTBYT ; RETURN A 1 FOR SUCCESS
|
||
|
||
171C ; ------
|
||
171C ; WINDOW
|
||
171C ; ------
|
||
|
||
006D X1 EQU ARG1
|
||
006F Y1 EQU ARG2
|
||
0071 X2 EQU ARG3
|
||
0073 Y2 EQU ARG4
|
||
|
||
171C A006 GWIND: LDY #6 ; SET INDEX TO DO ALL ARGS
|
||
|
||
171E A200 WILP: LDX #0 ; TO ZERO ARGS LATER
|
||
1720 B96E00 LDA X1+HI,Y ; TEST IF - OR >255
|
||
1723 F009 BEQ WISK1 ; IF 0 DONT ADJUST GOTO NEXT ARG
|
||
1725 1004 BPL WISK2 ; IF PLUS ADJUST TO 255
|
||
1727 966D STX X1+LO,Y ; CLIP FROM NEGATIVE TO ZERO
|
||
1729 3003 BMI WISK1 ; BRANCH
|
||
172B CA WISK2: DEX ; [X] = 255
|
||
172C 966D STX X1+LO,Y ; IF > 255 CLIP TO 255
|
||
172E 88 WISK1: DEY
|
||
172F 88 DEY ; 2 DEYS FOR NEXT ARG (WORD)
|
||
1730 10EC BPL WILP ; DO Y2-X1
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 72
|
||
--- I/O ROUTINES ---
|
||
|
||
|
||
1732 A227 LDX #39 ; MAXIMUM X-VALUE
|
||
1734 A017 LDY #23 ; MAXIMUM Y-VALUE
|
||
|
||
1736 A56D LDA X1+LO ; CLIP X1
|
||
1738 C928 CMP #40
|
||
173A 9002 BCC WISK3
|
||
173C 866D STX X1+LO
|
||
|
||
173E A571 WISK3: LDA X2+LO ; CLIP X2
|
||
1740 C928 CMP #40
|
||
1742 9002 BCC WISK4
|
||
1744 8671 STX X2+LO
|
||
|
||
1746 A56F WISK4: LDA Y1+LO ; CLIP Y1
|
||
1748 C918 CMP #24
|
||
174A 9002 BCC WISK5
|
||
174C 846F STY Y1+LO
|
||
|
||
174E A573 WISK5: LDA Y2+LO ; CLIP Y2
|
||
1750 C918 CMP #24
|
||
1752 9002 BCC WISK6
|
||
1754 8473 STY Y2+LO
|
||
|
||
1756 ; SWITCH IF NEEDED
|
||
|
||
1756 A66D WISK6: LDX X1+LO
|
||
1758 A471 LDY X2+LO
|
||
|
||
175A E471 CPX X2+LO ; IS X1 > X2?
|
||
175C B006 BCS WISK7 ; BRANCH YES
|
||
175E 86C9 STX WINDX1 ; SET X1 = X1
|
||
1760 84CB STY WINDX2 ; SET X2 = X2
|
||
1762 9004 BCC WISK8 ; BRANCH
|
||
|
||
1764 86CB WISK7: STX WINDX2 ; SWAP
|
||
1766 84C9 STY WINDX1 ; X1 AND X2
|
||
|
||
1768 A66F WISK8: LDX Y1+LO ; GET Y1 AND
|
||
176A A473 LDY Y2+LO ; Y2
|
||
|
||
176C E473 CPX Y2+LO ; IS Y1 > Y2?
|
||
176E B006 BCS WISK9 ; BRANCH YES
|
||
1770 86CA STX WINDY1 ; SET Y1 = Y1
|
||
1772 84CC STY WINDY2 ; SET Y2 = Y2
|
||
1774 9004 BCC WISKA ; BRANCH
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 73
|
||
--- I/O ROUTINES ---
|
||
|
||
1776 86CC WISK9: STX WINDY2 ; SWAP
|
||
1778 84CA STY WINDY1 ; Y1 AND Y2
|
||
|
||
177A E6CB WISKA: INC WINDX2 ; THIS IS SO A BCC WILL WORK ON CLIP
|
||
177C E6CC INC WINDY2 ; SAME
|
||
|
||
177E A5CC LDA WINDY2 ; COMPUTE HEIGHT
|
||
1780 38 SEC
|
||
1781 E5CA SBC WINDY1
|
||
1783 85CD STA WINDH
|
||
|
||
1785 A5CB LDA WINDX2 ; COMPUTE WIDTH
|
||
1787 E5C9 SBC WINDX1 ; C=1 FROM ABOVE
|
||
1789 85CE STA WINDW
|
||
178B 60 RTS
|
||
|
||
178C 84AC MULXY STY MUSHFT
|
||
178E A007 LDY #7
|
||
1790 A900 LDA #0
|
||
1792 85AE STA MUH
|
||
1794 8A TXA ; TEST 0
|
||
1795 F012 BEQ MU0
|
||
1797 CA DEX
|
||
1798 8A MULP1: TXA
|
||
1799 46AC LSR MUSHFT
|
||
179B 9004 BCC MUSK1
|
||
179D 65AE ADC MUH
|
||
179F 85AE STA MUH
|
||
17A1 66AE MUSK1: ROR MUH
|
||
17A3 66AD ROR MUL
|
||
17A5 88 DEY
|
||
17A6 10F0 BPL MULP1
|
||
17A8 60 RTS
|
||
17A9 85AD MU0: STA MUL
|
||
17AB 60 RTS
|
||
|
||
END
|
||
INCLUD ITERS.ASM
|
||
|
||
17AC ;--------------------------------------------
|
||
17AC ; ITERATIONS
|
||
17AC ; EXECUTE THE ITERATION TABLE AT [ARG2]
|
||
17AC ; TEST FOR INPUT AFTER EACH ENTRY IS DONE AND
|
||
17AC ; -------------------------------------------
|
||
|
||
17AC A570 ITRATE: LDA ARG2+HI
|
||
17AE 8572 STA ARG3+HI ; POINT ARG3 AT TABLE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 74
|
||
--- ITERATION STUFF ---
|
||
|
||
17B0 A56F LDA ARG2+LO
|
||
17B2 8571 STA ARG3+LO
|
||
|
||
17B4 A900 LDA #00 ; SET OFFSET INTO TABLE=0
|
||
17B6 8574 STA ARG4+HI
|
||
17B8 8573 STA ARG4+LO
|
||
17BA 208918 JSR ICALC ; POINT [I] AT TABLE
|
||
|
||
17BD B17A LDA (I),Y ; NUMBER OF ENTRIES
|
||
17BF 85BE STA ITICN
|
||
17C1 C8 INY
|
||
17C2 B17A LDA (I),Y ; ENTRY TO START WITH
|
||
17C4 85BF STA ITPNT ; (NORMALLY ENTRY 1)
|
||
|
||
17C6 E673 INC ARG4+LO ; POINT AT FISRT WORD IN FIRST ENTRY
|
||
|
||
17C8 A201 LDX #1
|
||
17CA E4BF ITLP2: CPX ITPNT ; SKIP ENTRIES 1 TO ITPNT
|
||
17CC F006 BEQ ITLOOP
|
||
17CE 207D18 JSR NXTENT
|
||
17D1 E8 INX
|
||
17D2 D0F6 BNE ITLP2 ; BRA
|
||
|
||
17D4 208918 ITLOOP: JSR ICALC ; SET (I) CORECTLY
|
||
|
||
17D7 B17A LDA (I),Y ; POINT IADR1 AT "HEADER"
|
||
17D9 85B0 STA IADR1+HI
|
||
17DB 84B1 STY IADR10
|
||
17DD C8 INY
|
||
17DE B17A LDA (I),Y
|
||
17E0 85AF STA IADR1+LO
|
||
|
||
17E2 A007 LDY #7 ; CURRENT ITERATION
|
||
17E4 B17A LDA (I),Y
|
||
17E6 48 PHA ; SAVE
|
||
17E7 AA TAX
|
||
17E8 E8 INX ; TAKE CARE OF SETING FOR NEXT ITERATION
|
||
|
||
17E9 A009 LDY #9 ; NUMBER OF ITERATIONS
|
||
17EB D17A CMP (I),Y
|
||
17ED D002 BNE ITSKP2
|
||
17EF A201 LDX #1 ; RESTET TO FIRST ITERATION
|
||
17F1 8A ITSKP2: TXA
|
||
17F2 A007 LDY #7
|
||
17F4 917A STA (I),Y ; NEXT ITERATION
|
||
|
||
17F6 C8 INY ;=8
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 75
|
||
--- ITERATION STUFF ---
|
||
|
||
17F7 B17A LDA (I),Y ; BSET
|
||
17F9 85CF STA BSET
|
||
|
||
17FB A00A LDY #10 ; WIDTH
|
||
17FD B17A LDA (I),Y
|
||
17FF 85B5 STA IX1
|
||
1801 AA TAX
|
||
1802 C8 INY
|
||
1803 B17A LDA (I),Y ; HEIGHT
|
||
1805 85B7 STA IY1
|
||
1807 A8 TAY
|
||
1808 208C17 JSR MULXY ; FIND WIDTH*HEIGHT
|
||
|
||
180B 68 PLA ; RESTORE CURRENT ITERATION
|
||
180C A8 TAY
|
||
180D 88 ITLP3: DEY ; ZERO ALIGN FIRST TIME THRU/ THEN JUST DEX
|
||
180E F00A BEQ ITSKP3
|
||
1810 A5AE LDA MUH ; ADD LENGTH OF ICON (WIDTH*HEIGTH)
|
||
1812 A6AD LDX MUL
|
||
1814 202F19 JSR ADDIA1
|
||
1817 4C0D18 JMP ITLP3
|
||
|
||
181A 98 ITSKP3: TYA ;=0
|
||
181B A204 LDX #4
|
||
181D 202F19 JSR ADDIA1 ; SKIP 4 HEADER BYTES
|
||
|
||
1820 A002 LDY #2 ; =2
|
||
1822 B17A LDA (I),Y ; ICON XPOS
|
||
1824 856E STA ARG1+HI
|
||
1826 C8 INY ; =3
|
||
1827 B17A LDA (I),Y
|
||
1829 856D STA ARG1+LO
|
||
182B C8 INY ; =4
|
||
182C B17A LDA (I),Y ; ICON YPOS
|
||
182E 8570 STA ARG2+HI
|
||
1830 C8 INY ; =5
|
||
1831 B17A LDA (I),Y
|
||
1833 856F STA ARG2+LO
|
||
1835 C8 INY ; =6
|
||
1836 B17A LDA (I),Y ; NEGATE
|
||
1838 85E9 ITSKP4: STA NEGATE
|
||
|
||
183A A900 LDA #00
|
||
183C 85E3 STA MSKFLG ; DISABLE MASKING
|
||
|
||
183E 20EB14 JSR ITENT ; ENTER DRAW ROUTINE
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 76
|
||
--- ITERATION STUFF ---
|
||
|
||
1841 207D18 JSR NXTENT ; POINT ARG4 AT NEXT ENTRY
|
||
|
||
1844 A6BF LDX ITPNT ; ARE WE DONE YET?
|
||
1846 E4BE CPX ITICN
|
||
1848 F023 BEQ ITEXI ; YES WE ARE DONE
|
||
|
||
184A E6BF INC ITPNT ; OTHERWISE POINT TO NEXT ENTRY
|
||
|
||
184C A579 LDA VALUE+HI ; IF INPUT WAS CALLED WITH A NEG INT
|
||
184E 3007 BMI NONSNS ; DO NOT LOOK FOR INPUT
|
||
|
||
1850 205D1D JSR SENSE ; DO WE HAVE AN INPUT
|
||
1853 C98F CMP #%10001111
|
||
1855 D003 BNE ITSKP5 ; GO HANDLE AN INPUT
|
||
1857 4CD417 NONSNS: JMP ITLOOP ; OTHERWISE DO NEXT ENTRY
|
||
|
||
185A 48 ITSKP5: PHA ; SAVE INPUT
|
||
185B A900 LDA #00
|
||
185D 8574 STA ARG4+HI
|
||
185F 8573 STA ARG4+LO ; POINT AT TABLE HEADER
|
||
1861 208918 JSR ICALC
|
||
1864 C8 INY ; =1
|
||
1865 A5BF LDA ITPNT ; SAVE STATUS OF HOW FAR WE GOT IN DOING
|
||
1867 917A STA (I),Y ; THE TABLE
|
||
|
||
1869 68 PLA ; RESTORE SENSE
|
||
186A 4C600F JMP PUTBYT ; RETURN SENSE
|
||
|
||
186D A900 ITEXI: LDA #00
|
||
186F 8574 STA ARG4+HI
|
||
1871 8573 STA ARG4+LO
|
||
1873 208918 JSR ICALC ; POINT TO TABLE HEADER
|
||
1876 C8 INY ; =1
|
||
1877 98 TYA
|
||
1878 917A STA (I),Y
|
||
187A 4C351D JMP NOIT
|
||
|
||
|
||
|
||
187D ;-----------------------------
|
||
187D ; SKIP 6 WORDS (1 TABLE ENTRY)
|
||
187D ;-----------------------------
|
||
|
||
187D A906 NXTENT: LDA #6 ; ADD 6 TO ARG4
|
||
187F 18 CLC
|
||
1880 6573 ADC ARG4+LO
|
||
1882 8573 STA ARG4+LO
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 77
|
||
--- ITERATION STUFF ---
|
||
|
||
1884 9002 BCC NEXI
|
||
1886 E674 INC ARG4+HI
|
||
1888 60 NEXI: RTS
|
||
|
||
1889 ;-----------------------------------------------------------
|
||
1889 ; ICALC POINTS [I] AT THE RAM ADDRESS OF THE TABLE,OFFSET OF
|
||
1889 ; ARG3,ARG4
|
||
1889 ; AND GENERATES A PURITY ERROR IF [I] POINTS AT PURE CODE.
|
||
1889 ;
|
||
1889 ; EXITS: <Y>=0
|
||
1889 ;------------------------------------------------------------
|
||
|
||
1889 A000 ICALC: LDY #00
|
||
188B A573 LDA ARG4+LO
|
||
188D 18 CLC
|
||
188E 6571 ADC ARG3+LO
|
||
1890 857A STA I+LO
|
||
1892 A574 LDA ARG4+HI
|
||
1894 6572 ADC ARG3+HI
|
||
1896 4C1914 JMP ICENT ;ENTRY IN PCALC
|
||
|
||
|
||
END
|
||
INCLUD IOSUBS.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 78
|
||
--- I/O SUPPORT ROUTINES ---
|
||
|
||
|
||
1899 ;-----------------------------------------
|
||
1899 ; INCRIMENT [VPC]+HI,[VPC]+LO,[VPC0]
|
||
1899 ;-----------------------------------------
|
||
|
||
1899 A588 INCVPC: LDA VPC0 ; EFFECTIVLY ADD 1
|
||
189B 4901 EOR #$01 ; WITH EOR
|
||
189D 8588 STA VPC0
|
||
189F D008 BNE VPEX1
|
||
|
||
18A1 8589 STA VPCFLG ; INVALIDATE FLAG
|
||
|
||
18A3 E686 INC VPC+LO
|
||
18A5 D002 BNE VPEX1
|
||
18A7 E687 INC VPC+HI
|
||
18A9 60 VPEX1: RTS
|
||
|
||
18AA ;----------------------------
|
||
18AA ; ADD A,X TO [VPC]+HI,+LO,0
|
||
18AA ;----------------------------
|
||
|
||
18AA 867C ADDVPC: STX J+LO ; SAVE <X>
|
||
18AC 4A LSR A ; SHIFT SO AS TO ALIGN WITH 8,8,1 BIT PATTERN
|
||
18AD ; IN [VPC]
|
||
18AD 857D STA J+HI
|
||
18AF 667C ROR J+LO ; SHIFT LOW PART
|
||
18B1 9004 BCC AVISK
|
||
18B3 209918 JSR INCVPC ; IF CARRY SET ADD 1 TO [VPC]
|
||
18B6 18 CLC
|
||
18B7 A586 AVISK: LDA VPC+LO
|
||
18B9 657C ADC J+LO
|
||
18BB 8586 STA VPC+LO
|
||
18BD A587 LDA VPC+HI
|
||
18BF 657D ADC J+HI
|
||
18C1 8587 STA VPC+HI
|
||
|
||
18C3 A900 LDA #00 ; INVALIDATE FLAG
|
||
18C5 8589 STA VPCFLG
|
||
|
||
18C7 60 RTS
|
||
|
||
|
||
18C8 ;-----------------------------------------
|
||
18C8 ; INCRIMENT [GPC]+HI,[GPC]+LO,[GPC0]
|
||
18C8 ;-----------------------------------------
|
||
|
||
18C8 A582 INCGPC: LDA GPC0 ; EFFECTIVLY ADD 1
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 79
|
||
--- I/O SUPPORT ROUTINES ---
|
||
|
||
18CA 4901 EOR #$01 ; WITH EOR
|
||
18CC 8582 STA GPC0
|
||
18CE D008 BNE GPEX1
|
||
|
||
18D0 8583 STA GPCFLG ; INVALIDATE FLAG
|
||
|
||
18D2 E680 INC GPC+LO
|
||
18D4 D002 BNE GPEX1
|
||
18D6 E681 INC GPC+HI
|
||
18D8 60 GPEX1: RTS
|
||
|
||
18D9 ;----------------------------
|
||
18D9 ; ADD A,X TO [GPC]+HI,+LO,0
|
||
18D9 ;----------------------------
|
||
|
||
18D9 867C ADDGPC: STX J+LO ; SAVE <X>
|
||
18DB 4A LSR A ; SHIFT SO AS TO ALIGN WITH 8,8,1 BIT PATTERN
|
||
18DC ; IN [GPC]
|
||
18DC 857D STA J+HI
|
||
18DE 667C ROR J+LO ; SHIFT LOW PART
|
||
18E0 9004 BCC AGISK
|
||
18E2 20C818 JSR INCGPC ; IF CARRY SET ADD 1 TO [GPC]
|
||
18E5 18 CLC
|
||
18E6 A580 AGISK: LDA GPC+LO
|
||
18E8 657C ADC J+LO
|
||
18EA 8580 STA GPC+LO
|
||
18EC A581 LDA GPC+HI
|
||
18EE 657D ADC J+HI
|
||
18F0 8581 STA GPC+HI
|
||
|
||
18F2 A900 LDA #00 ; INVALIDATE FLAG
|
||
18F4 8583 STA GPCFLG
|
||
|
||
18F6 60 RTS
|
||
|
||
18F7 ;-----------------------------------------
|
||
18F7 ; INCRIMENT [IADR2]+HI,[IADR2]+LO,[IADR20]
|
||
18F7 ;-----------------------------------------
|
||
|
||
18F7 A5B4 INCIA2: LDA IADR20 ; EFFECTIVLY ADD 1
|
||
18F9 4901 EOR #$01 ; WITH EOR
|
||
18FB 85B4 STA IADR20
|
||
18FD D006 BNE INEX2
|
||
18FF E6B2 INC IADR2+LO
|
||
1901 D002 BNE INEX2
|
||
1903 E6B3 INC IADR2+HI
|
||
1905 60 INEX2: RTS
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 80
|
||
--- I/O SUPPORT ROUTINES ---
|
||
|
||
|
||
1906 ;----------------------------
|
||
1906 ; ADD A,X TO [IADR2]+HI,+LO,0
|
||
1906 ;----------------------------
|
||
|
||
1906 867C ADDIA2: STX J+LO ; SAVE <X>
|
||
1908 4A LSR A ; SHIFT SO AS TO ALIGN WITH 8,8,1 BIT PATTERN
|
||
1909 ; IN [IADR2]
|
||
1909 857D STA J+HI
|
||
190B 667C ROR J+LO ; SHIFT LOW PART
|
||
190D 9004 BCC ADIS2
|
||
190F 20F718 JSR INCIA2 ; IF CARRY SET ADD 1 TO [IADR1]
|
||
1912 18 CLC
|
||
1913 A5B2 ADIS2: LDA IADR2+LO
|
||
1915 657C ADC J+LO
|
||
1917 85B2 STA IADR2+LO
|
||
1919 A5B3 LDA IADR2+HI
|
||
191B 657D ADC J+HI
|
||
191D 85B3 STA IADR2+HI
|
||
191F 60 RTS
|
||
|
||
1920 ;-----------------------------------------
|
||
1920 ; INCRIMENT [IADR1]+HI,[IADR1]+LO,[IADR10]
|
||
1920 ;-----------------------------------------
|
||
|
||
1920 A5B1 INCIA1: LDA IADR10 ; EFFECTIVLY ADD 1
|
||
1922 4901 EOR #$01 ; WITH EOR
|
||
1924 85B1 STA IADR10
|
||
1926 D006 BNE INEX1
|
||
1928 E6AF INC IADR1+LO
|
||
192A D002 BNE INEX1
|
||
192C E6B0 INC IADR1+HI
|
||
192E 60 INEX1: RTS
|
||
|
||
192F ;----------------------------
|
||
192F ; ADD A,X TO [IADR1]+HI,+LO,0
|
||
192F ;----------------------------
|
||
|
||
192F 867C ADDIA1: STX J+LO ; SAVE <X>
|
||
1931 4A LSR A ; SHIFT SO AS TO ALIGN WITH 8,8,1 BIT PATTERN
|
||
1932 ; IN [IADR1]
|
||
1932 857D STA J+HI
|
||
1934 667C ROR J+LO ; SHIFT LOW PART
|
||
1936 9004 BCC ADISK
|
||
1938 202019 JSR INCIA1 ; IF CARRY SET ADD 1 TO [IADR1]
|
||
193B 18 CLC
|
||
193C A5AF ADISK: LDA IADR1+LO
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 81
|
||
--- I/O SUPPORT ROUTINES ---
|
||
|
||
193E 657C ADC J+LO
|
||
1940 85AF STA IADR1+LO
|
||
1942 A5B0 LDA IADR1+HI
|
||
1944 657D ADC J+HI
|
||
1946 85B0 STA IADR1+HI
|
||
1948 60 RTS
|
||
1949 ; ----------------
|
||
1949 ; GET BLOCKSET [A]
|
||
1949 ; ----------------
|
||
|
||
1949 ; ENTRY: BLOCKSET ID # (1-255) IN [A]
|
||
1949 ; EXIT: VIRTUAL BASE ADDR OF BLOCKSET DATA IN [BSADR]
|
||
1949 ; # BLOCKS IN [BSIZE]
|
||
1949 ; BLOCKSET DATA PAGED INTO RAM
|
||
|
||
1949 A000 GETBS: LDY #0
|
||
194B 8489 STY VPCFLG ; INVALIDATE [VPC]
|
||
194D 847B STY I+HI ; CLEAR MSB OF INDEX
|
||
194F 84AD STY MUL ; AND MULTIPLICATION
|
||
1951 84AE STY MUH ; REGISTERS
|
||
|
||
1953 38 SEC
|
||
1954 E901 SBC #1 ; ZERO-ALIGN AND
|
||
1956 0A ASL A ; WORD-ALIGN THE
|
||
1957 267B ROL I+HI ; BLOCKSET INDEX (ALSO CLEARS CARRY)
|
||
|
||
1959 659E ADC BTAB+LO ; ADD BASE ADDRESS OF
|
||
195B 857A STA I+LO ; BLOCKSET TABLE
|
||
195D A57B LDA I+HI ; TO GET ABS ADDR OF POINTER
|
||
195F 659F ADC BTAB+HI ; INTO [I]
|
||
1961 857B STA I+HI
|
||
|
||
1963 B17A LDA (I),Y ; GET MSB OF POINTER ([Y] = 0)
|
||
1965 8587 STA VPCH
|
||
1967 C8 INY ; ALSO GET LSB
|
||
1968 B17A LDA (I),Y ; SO THAT [VPC] POINTS TO
|
||
196A 8586 STA VPCL ; V-ADDR OF BLOCKSET FILE
|
||
|
||
;***
|
||
196C A900 LDA #00
|
||
196E 8588 STA VPC0
|
||
;***
|
||
1970 20251B JSR GETBYT
|
||
1973 85EA STA BLKLEN ; SAVE # BYTES PER BLOCK
|
||
|
||
1975 20251B JSR GETBYT ; 2ND BYTE HAS # BLOCKS
|
||
1978 85D2 STA BSIZE ; SAVE HERE FOR REFERENCE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 82
|
||
--- I/O SUPPORT ROUTINES ---
|
||
|
||
197A 85AC STA MUSHFT ; AND HERE FOR MULTIPLY
|
||
|
||
197C A586 LDA VPCL ; MOVE V-ADDR OF BLOCKSET DATA
|
||
197E 85D0 STA BSADR+LO ; INTO [BSADR]
|
||
1980 A587 LDA VPCH
|
||
1982 85D1 STA BSADR+HI
|
||
|
||
1984 C595 CMP IPURE ; IS THIS SET IN I-PRELOAD?
|
||
1986 9037 BCC GBLX ; EXIT NOW IF SO
|
||
|
||
1988 ; LOAD THE ENTIRE BLOCKSET AT [VPC] INTO PAGING RAM
|
||
|
||
1988 A007 LDY #7 ; INIT BIT-LOOP INDEX
|
||
198A A6EA LDX BLKLEN ; GET BLOCK LENGTH
|
||
198C CA DEX ; ZERO-ALIGN
|
||
198D 8A GBL1: TXA ; MULTIPLY BY
|
||
198E 46AC LSR MUSHFT ; # BLOCKS IN BLOCKSET
|
||
1990 9004 BCC GBL2 ; TO GET SIZE
|
||
1992 65AE ADC MUH ; OF BLOCKSET
|
||
1994 85AE STA MUH ; IN [MUL/H]
|
||
1996 66AE GBL2: ROR MUH
|
||
1998 66AD ROR MUL
|
||
199A 88 DEY
|
||
199B 10F0 BPL GBL1
|
||
|
||
;***
|
||
199D 46AE LSR MUH
|
||
199F 66AD ROR MUL
|
||
;***
|
||
|
||
19A1 A586 LDA VPCL ; ADD LSB OF BLOCKSET START ADDRESS
|
||
19A3 18 CLC ; TO LSB OF
|
||
19A4 65AD ADC MUL ; BLOCKSET SIZE IN [MUL/H]
|
||
19A6 9002 BCC GBL3 ; CONTINUE IF NO PAGE OVERFLOW
|
||
19A8 E6AE INC MUH ; ELSE FORCE EXTRA PAGE LOAD
|
||
|
||
19AA A5AE GBL3: LDA MUH ; IF [MUH] = 0,
|
||
19AC F011 BEQ GBLX ; NO MORE PAGES ARE NEEDED
|
||
|
||
19AE E687 GBL4: INC VPCH ; ELSE POINT TO NEXT PAGE
|
||
19B0 A900 LDA #0
|
||
19B2 8589 STA VPCFLG ; INVALIDATE [VPC]
|
||
19B4 20251B JSR GETBYT ; GET A BYTE (FORCE PAGE LOAD)
|
||
19B7 C6AE DEC MUH ; LOADED ALL BLOCKSET PAGES YET?
|
||
19B9 D0F3 BNE GBL4 ; LOOP TILL EMPTY
|
||
|
||
19BB A900 LDA #0
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 83
|
||
--- I/O SUPPORT ROUTINES ---
|
||
|
||
19BD 8589 STA VPCFLG ; INVALIDATE [VPC]
|
||
|
||
19BF 60 GBLX: RTS
|
||
|
||
19C0 ; ---------------------------------
|
||
19C0 ; GET BLOCK [A] IN CURRENT BLOCKSET
|
||
19C0 ; ---------------------------------
|
||
|
||
19C0 ; ENTRY: BLOCK ID # (0-255) IN [A]
|
||
19C0 ; EXIT: BLOCK DATA IN [BLOCK]
|
||
|
||
19C0 85AC GETBLK: STA MUSHFT ; SAVE BLOCK ID
|
||
|
||
19C2 A900 LDA #0
|
||
19C4 8589 STA VPCFLG ; INVALIDATE [VPC]
|
||
19C6 85AD STA MUL ; CLEAR LSB AND
|
||
19C8 85AE STA MUH ; MSB OF OFFSET
|
||
|
||
19CA A007 LDY #7 ; INIT BIT-SHIFT INDEX
|
||
|
||
19CC A6EA LDX BLKLEN ; GET LENGTH OF BLOCKS
|
||
19CE CA DEX ; ZERO-ALIGN
|
||
19CF 867A STX I+LO ; SAVE FOR LATER LOOPING
|
||
19D1 8A MULP: TXA
|
||
19D2 46AC LSR MUSHFT
|
||
19D4 9004 BCC MUSK
|
||
19D6 65AE ADC MUH
|
||
19D8 85AE STA MUH
|
||
19DA 66AE MUSK: ROR MUH
|
||
19DC 66AD ROR MUL
|
||
19DE 88 DEY
|
||
19DF 10F0 BPL MULP
|
||
|
||
;MUEND: LDA MUL ; [MUL/H] HAS BLOCK OFFSET
|
||
; CLC
|
||
; ADC BSADR+LO ; ADD THE VIRTUAL BASE ADDR
|
||
; STA VPCL ; OF THE CURRENT BLOCKSET
|
||
; LDA MUH ; TO GET THE VIRTUAL BASE ADDRESS
|
||
; ADC BSADR+HI ; OF THE DESIRED BLOCK
|
||
; STA VPCH
|
||
|
||
;***
|
||
19E1 A5D0 MUEND: LDA BSADR+LO ; PUT WORD POINTER TO START OF BLOCKSET
|
||
19E3 8586 STA VPCL ; IN VPCH,L
|
||
19E5 A5D1 LDA BSADR+HI
|
||
19E7 8587 STA VPCH
|
||
19E9 A900 LDA #00 ; ZERO BOTTEM BIT
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 84
|
||
--- I/O SUPPORT ROUTINES ---
|
||
|
||
19EB 8588 STA VPC0
|
||
|
||
19ED A5AE LDA MUH ; ADD OFFSET TO BLOCK TO VPC
|
||
19EF A6AD LDX MUL
|
||
19F1 20AA18 JSR ADDVPC
|
||
;***
|
||
|
||
19F4 20251B GBLL: JSR GETBYT ; GET A BYTE
|
||
19F7 A67A LDX I+LO
|
||
19F9 95D3 STA BLOCK,X ; STORE BYTE IN [BLOCK]
|
||
19FB C67A DEC I+LO
|
||
19FD CA DEX ; LOOP TILL
|
||
19FE 10F4 BPL GBLL ; ALL BYTES DONE
|
||
|
||
1A00 ; NEGATE [BLOCK] IF [NEGATE] IS TRUE
|
||
|
||
1A00 A5E9 LDA NEGATE
|
||
1A02 F00B BEQ BLOCKX
|
||
|
||
1A04 A207 LDX #7 ; NEGATE [BLOCK]
|
||
1A06 B5D3 GBLLL: LDA BLOCK,X
|
||
1A08 49FF EOR #$FF
|
||
1A0A 95D3 STA BLOCK,X
|
||
1A0C CA DEX
|
||
1A0D 10F7 BPL GBLLL
|
||
|
||
1A0F 60 BLOCKX: RTS
|
||
|
||
1A10 ; ------------------------
|
||
1A10 ; SETUP FOR SETI AND SWAPI
|
||
1A10 ; ------------------------
|
||
|
||
1A10 A673 ISETUP: LDX ARG4+LO ; GET ADDR OF DESTINATION ICON
|
||
1A12 A574 LDA ARG4+HI
|
||
1A14 C595 CMP IPURE ; IS DEST IN I-PRELOAD?
|
||
1A16 9003 BCC ISU ; CONTINUE IF SO
|
||
|
||
1A18 4CC516 JMP PRERR2 ; ELSE PURITY VIOLATION!
|
||
|
||
1A1B ;----------------------
|
||
1A1B ; ENTRY FOR MASK SET UP
|
||
1A1B ;----------------------
|
||
|
||
1A1B 20361A ISU: JSR GETI ; FETCH STATS OF DEST ICON
|
||
|
||
1A1E A5B5 LDA IX1 ; COPY DEST ICON STATS
|
||
1A20 85B6 STA IX2 ; INTO AUXILIARY REGISTERS
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 85
|
||
--- I/O SUPPORT ROUTINES ---
|
||
|
||
1A22 A5B7 LDA IY1
|
||
1A24 85B8 STA IY2
|
||
|
||
1A26 A5B1 LDA IADR10
|
||
1A28 85B4 STA IADR20
|
||
1A2A A5AF LDA IADR1+LO
|
||
1A2C 85B2 STA IADR2+LO
|
||
1A2E A5B0 LDA IADR1+HI
|
||
1A30 85B3 STA IADR2+HI
|
||
|
||
1A32 A671 LDX ARG3+LO ; NOW GET SOURCE ICON STATS
|
||
1A34 A572 LDA ARG3+HI
|
||
|
||
1A36 ; FALL THROUGH TO ...
|
||
|
||
1A36 ; --------
|
||
1A36 ; GET ICON
|
||
1A36 ; --------
|
||
|
||
1A36 ; ENTRY: V-ADDR OF ICON FILE IN [X/A]
|
||
1A36 ; EXIT: ICON DATA V-ADDR IN [IADR1]
|
||
1A36 ; X-SIZE IN [IX1] & [XDEX1]
|
||
1A36 ; Y-SIZE IN [IY1] & [YDEX1]
|
||
1A36 ; ASSIGNED BLOCKSET IN [BSET]
|
||
|
||
1A36 8686 GETI: STX VPCL
|
||
1A38 8587 STA VPCH
|
||
1A3A A900 LDA #0
|
||
;***
|
||
1A3C 8588 STA VPC0
|
||
;***
|
||
1A3E 8589 STA VPCFLG ; INVALIDATE [VPC]
|
||
|
||
1A40 20251B JSR GETBYT ; 1ST BYTE HAS
|
||
1A43 85CF STA BSET ; ASSIGNED BLOCKSET
|
||
|
||
1A45 20251B JSR GETBYT ; 2ND BYTE HAS
|
||
1A48 85BD STA ITERS ; # ITERATIONS
|
||
|
||
1A4A 20251B JSR GETBYT ; 3RD BYTE HAS
|
||
1A4D 85B5 STA IX1 ; X-SIZE
|
||
|
||
1A4F 20251B JSR GETBYT ; 4TH BYTE HAS
|
||
1A52 85B7 STA IY1 ; Y-SIZE
|
||
1A54 857C STA J+LO ; SAVE HERE FOR LATER
|
||
|
||
1A56 A586 LDA VPCL ; SAVE BASE V-ADDR
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 86
|
||
--- I/O SUPPORT ROUTINES ---
|
||
|
||
1A58 85AF STA IADR1+LO ; IN [IADR]
|
||
1A5A A587 LDA VPCH
|
||
1A5C 85B0 STA IADR1+HI
|
||
1A5E A588 LDA VPC0
|
||
1A60 85B1 STA IADR10
|
||
|
||
|
||
1A62 C595 CMP IPURE ; IS THIS ICON PRELOADED?
|
||
|
||
1A64 9023 BCC NEWXY ; YES, SCRAM NOW
|
||
|
||
|
||
1A66 ; MAKE SURE ICON DATA IS PAGED INTO RAM
|
||
|
||
1A66 A586 LDA VPCL ; GET CURRENT PAGE POINTER
|
||
1A68 18 CLC
|
||
1A69 65B5 ADC IX1 ; ADD X-OFFSET
|
||
1A6B B008 BCS ILD1 ; GET NEW PAGE IF BOUNDARY CROSSED
|
||
|
||
1A6D C67C ILD0: DEC J+LO ; OUT OF X-LINES YET?
|
||
1A6F F014 BEQ ILD2 ; YES, ICON IS ALL LOADED
|
||
1A71 65B5 ADC IX1 ; ELSE ADD ANOTHER X-LINE
|
||
1A73 90F8 BCC ILD0 ; LOOP BACK IF SAME PAGE
|
||
|
||
1A75 857D ILD1: STA J+HI ; SAVE NEW PAGE POINTER
|
||
1A77 E687 INC VPCH ; POINT TO NEXT PAGE
|
||
1A79 A900 LDA #0
|
||
1A7B 8589 STA VPCFLG ; INVALIDATE [VPC]
|
||
1A7D 20251B JSR GETBYT ; TO FORCE PAGE LOAD
|
||
1A80 A57D LDA J+HI ; RESTORE POINTER
|
||
1A82 18 CLC ; CLEAR CARRY FOR NEW LOOP
|
||
1A83 90E8 BCC ILD0 ; BRANCH ALWAYS
|
||
|
||
1A85 A900 ILD2: LDA #0
|
||
1A87 8589 STA VPCFLG ; INVALIDATE [VPC]
|
||
|
||
1A89 ; FALL THROUGH ...
|
||
|
||
|
||
1A89 ; -------------------------
|
||
1A89 ; REFRESH [XDEX1] & [YDEX1]
|
||
1A89 ; -------------------------
|
||
|
||
1A89 A5B5 NEWXY: LDA IX1
|
||
1A8B 85B9 STA XDEX1
|
||
1A8D A5B7 LDA IY1
|
||
1A8F 85BB STA YDEX1
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 87
|
||
--- I/O SUPPORT ROUTINES ---
|
||
|
||
1A91 60 RTS
|
||
|
||
1A92 ; -----------------------------
|
||
1A92 ; WILL SOURCE ICON FIT IN DEST?
|
||
1A92 ; -----------------------------
|
||
|
||
1A92 ; ENTRY: SOURCE STATS IN [1] REGISTERS, DEST IN [2]
|
||
1A92 ; EXIT: CARRY CLEAR IF FIT OKAY, ELSE CARRY SET
|
||
1A92 ; [IADR2] HAS ABSOLUTE ADDRESS OF SUB-ICON
|
||
|
||
1A92 A56D DOFIT: LDA ARG1+LO ; GET X-POSITION
|
||
1A94 18 CLC
|
||
1A95 65B5 ADC IX1 ; ADD X-SIZE OF SOURCE
|
||
1A97 C5B6 CMP IX2 ; COMPARE TO SIZE OF DEST
|
||
1A99 9002 BCC FIT ; OKAY IF LESS
|
||
1A9B D034 BNE FITEX ; OR EQUAL; ELSE EXIT W/CARRY SET
|
||
|
||
1A9D A56F FIT: LDA ARG2+LO ; GET Y-POSITION
|
||
1A9F A8 TAY ; SAVE HERE FOR INDEXING BELOW
|
||
1AA0 18 CLC
|
||
1AA1 65B7 ADC IY1 ; ADD SIZE OF SOURCE
|
||
1AA3 C5B8 CMP IY2 ; COMPARE TO SIZE OF DEST
|
||
1AA5 9002 BCC FIT0 ; OKAY IS LESS
|
||
1AA7 D028 BNE FITEX ; SO IS EQUAL; ELSE EXIT W/CARRY SET
|
||
|
||
1AA9 ; MAKE [IADR2] POINT TO ADDR OF SUB-ICON
|
||
|
||
1AA9 A56D FIT0: LDA ARG1+LO ; IF X-POS OF SUB-ICON IS 0,
|
||
1AAB F011 BEQ FIT3 ; DON'T ADD X-OFFSET
|
||
|
||
; LDA IADR2+LO
|
||
; CLC
|
||
; ADC ARG1+LO ; ADD X-COORD OF SUB-ICON
|
||
; STA IADR2+LO ; TO BASE ADDR OF DEST ICON
|
||
; BCC FIT3 ; TO GET BASE ADDR OF SUB-ICON
|
||
; INC IADR2+HI
|
||
; BNE FIT3 ; ALWAYS SKIP 1ST Y-ITERATION
|
||
;***
|
||
1AAD A900 LDA #0
|
||
1AAF A66D LDX ARG1+LO
|
||
1AB1 200619 JSR ADDIA2
|
||
1AB4 4CBE1A JMP FIT3
|
||
;***
|
||
|
||
;FIT2: LDA IADR2+LO ; ADD X-SIZE OF DEST ICON
|
||
; CLC ; TO BASE ADDR OF SUB-ICON
|
||
; ADC IX2 ; ONCE FOR EACH Y-COORD
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- OPCODE EXECUTORS PAGE 88
|
||
--- I/O SUPPORT ROUTINES ---
|
||
|
||
; STA IADR2+LO
|
||
; BCC FIT3
|
||
; INC IADR2+HI
|
||
;***
|
||
1AB7 A900 FIT2: LDA #0
|
||
1AB9 A6B6 LDX IX2
|
||
1ABB 200619 JSR ADDIA2
|
||
;***
|
||
|
||
1ABE 88 FIT3: DEY ; OUT OF Y-COORDS YET?
|
||
1ABF 10F6 BPL FIT2 ; NO, KEEP ADDING
|
||
|
||
1AC1 A5B3 LDA IADR2+HI ; MAKE SUB-ICON ADDR ABSOLUTE
|
||
1AC3 38 SEC ; BY STRIPPING OFF THE
|
||
1AC4 E594 SBC ISTART ; V-OFFSET
|
||
|
||
;***
|
||
1AC6 46B4 LSR IADR20
|
||
1AC8 26B2 ROL IADR2+LO
|
||
1ACA 2A ROL A
|
||
;***
|
||
1ACB 18 CLC ; AND ADDING THE ABS ADDR
|
||
1ACC 6592 ADC ICODE+HI ; OF THE
|
||
1ACE 85B3 STA IADR2+HI ; I-PRELOAD (LSB NEEDN'T CHANGE)
|
||
1AD0 18 CLC ; CLEAR CARRY FOR SUCCESS
|
||
|
||
1AD1 60 FITEX: RTS
|
||
|
||
END
|
||
|
||
INCLUD PAGING.ASM
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MEMORY MANAGEMENT PAGE 89
|
||
--- PAGING ROUTINES ---
|
||
|
||
|
||
1AD2 ; -----------------------
|
||
1AD2 ; GET NEXT BYTE OF G-CODE
|
||
1AD2 ; -----------------------
|
||
|
||
1AD2 ; EXIT: BYTE IN [A] & [Y], FLAGS SET
|
||
|
||
1AD2 A583 NEXTPC: LDA GPCFLG ; IS [GPOINT] VALID?
|
||
1AD4 D025 BNE NPC2 ; YES, CONTINUE
|
||
|
||
1AD6 A681 LDX GPCH ; GET TARGET V-PAGE
|
||
1AD8 BD0007 LDA MEMMAP,X ; IS IT ALREADY RESIDENT?
|
||
1ADB F00A BEQ NPC0 ; NO, PAGE IT IN
|
||
1ADD C596 CMP PAGE0 ; IS IT IN PRELOAD?
|
||
1ADF 900E BCC NPC1 ; YES, CONTINUE
|
||
|
||
1AE1 ; HANDLE A RESIDENT "PURE" PAGE
|
||
|
||
1AE1 20A01B JSR UPTIME ; UPDATE STAMP
|
||
1AE4 4CEF1A JMP NPC1 ; CONTINUE W/PAGE ADDR IN [A]
|
||
|
||
1AE7 ; FETCH A NON-RESIDENT "PURE" PAGE
|
||
|
||
1AE7 8589 NPC0: STA VPCFLG ; ([A]=0) INVALIDATE [VPC]
|
||
1AE9 20781B JSR PAGE ; GET ABS PAGE OF V-BLOCK [X] IN [A]
|
||
1AEC 4CD21A JMP NEXTPC
|
||
;THIS JUMP SHOULD NOT BE NEEDED BUT SEEMS TO HELP
|
||
|
||
|
||
1AEF ; [A] HAS ABS ADDR OF TARGET PAGE (FIRST RAM PAGE OF TWO PAGES)
|
||
|
||
1AEF 8585 NPC1: STA GPOINT+HI ; FORM MSB OF G-POINTER
|
||
1AF1 A580 LDA GPCL ; IF BIT 7 SET
|
||
1AF3 1002 BPL NPC1A
|
||
1AF5 E685 INC GPOINT+HI ; POINT [GPOINT] AT NEXT RAM PAGE
|
||
1AF7 A9FF NPC1A: LDA #$FF
|
||
1AF9 8583 STA GPCFLG ; VALIDATE [GPC]
|
||
|
||
1AFB ; [GPOINT] HAS POINTER TO ABS PAGE ADDR
|
||
|
||
1AFB ; PUT BITS 0 THRU 7 OF GPC INTO <Y>
|
||
|
||
1AFB A582 NPC2: LDA GPC0 ; PUT BIT 0 INTO <C>
|
||
1AFD 4A LSR A
|
||
1AFE A580 LDA GPCL ; GET BITS 1-8
|
||
1B00 2A ROL A ; DON'T WORRY ABOUT BIT 8
|
||
1B01 A8 TAY
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MEMORY MANAGEMENT PAGE 90
|
||
--- PAGING ROUTINES ---
|
||
|
||
|
||
1B02 B184 LDA (GPOINT),Y ; GET A G-BYTE
|
||
|
||
1B04 ; INCREMENT [GPC]
|
||
1B04 ; IF CROSSING A !RAM! PAGE ADJUST [GPOINT]
|
||
1B04 ; IF CROSSING A V-PAGE INVALIDATE FLAG
|
||
|
||
1B04 48 PHA ; SAVE THE BYTE
|
||
|
||
1B05 A582 LDA GPC0 ; EFFECTIVLY ADD 1
|
||
1B07 4901 EOR #$01
|
||
1B09 8582 STA GPC0
|
||
1B0B D015 BNE NPC3 ; BRANCH NO CARRY
|
||
|
||
1B0D E680 INC GPCL
|
||
1B0F F00B BEQ NPC4 ; BRANCH CROSSED V-PAGE
|
||
|
||
1B11 A580 LDA GPCL ; TEST FOR CROSS !RAM! PAGE
|
||
1B13 297F AND #$7F
|
||
1B15 D00B BNE NPC3 ; BRANCH NO CROSS
|
||
|
||
1B17 E685 INC GPOINT+HI ; ADJUST RAM POINTER
|
||
1B19 4C221B JMP NPC3
|
||
|
||
1B1C E681 NPC4: INC GPCH ; CROSS V-PAGE
|
||
1B1E A900 LDA #00
|
||
1B20 8583 STA GPCFLG ; INVALIDATE FLAG
|
||
|
||
1B22 68 NPC3: PLA ; RESTORE BYTE
|
||
1B23 A8 TAY ; SET FLAGS
|
||
1B24 60 RTS
|
||
|
||
1B25 ; ----------------------------
|
||
1B25 ; GET A BYTE OF VIRTUAL MEMORY
|
||
1B25 ; ----------------------------
|
||
|
||
1B25 ; EXIT: SAME AS "NEXTPC"
|
||
|
||
1B25 A589 GETBYT: LDA VPCFLG ; [VPC] VALID?
|
||
1B27 D025 BNE GTBT2 ; YES, CONTINUE
|
||
|
||
1B29 A687 LDX VPCH ; GET TARGET V-PAGE
|
||
1B2B BD0007 LDA MEMMAP,X ; ALREADY IN RAM?
|
||
1B2E F00A BEQ GTBT0 ; NO, PAGE IT IN
|
||
1B30 C596 CMP PAGE0 ; IS IT PRELOADED?
|
||
1B32 900E BCC GTBT1 ; YES, CONTINUE
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MEMORY MANAGEMENT PAGE 91
|
||
--- PAGING ROUTINES ---
|
||
|
||
1B34 ; HANDLE A RESIDENT PAGE
|
||
|
||
1B34 20A01B JSR UPTIME ; STAMP PAGE & UPDATE STAMP
|
||
1B37 4C421B JMP GTBT1 ; CONTINUE W/BUFFER ADDR IN [A]
|
||
|
||
1B3A ; HANDLE A NON-RESIDENT PAGE
|
||
|
||
1B3A 8583 GTBT0: STA GPCFLG ; ([A]=0) INVALIDATE [GPC]
|
||
1B3C 20781B JSR PAGE ; GET ABS PAGE OF V-BLOCK [X] INTO [A]
|
||
1B3F 4C251B JMP GETBYT
|
||
;THIS JMP SHOULD NOT BE NEEDED BUT SEEMS TO HELP
|
||
|
||
|
||
1B42 ; [A] HAS ABS PAGE # OF TARGET PAGE
|
||
|
||
1B42 858B GTBT1: STA VPOINT+HI ; SET MSB OF POINTER
|
||
1B44 A586 LDA VPCL ; IF BIT 7 SET
|
||
1B46 1002 BPL GTBT1A
|
||
1B48 E68B INC VPOINT+HI ; POINT AT NEXT RAM PAGE
|
||
1B4A A9FF GTBT1A: LDA #$FF
|
||
1B4C 8589 STA VPCFLG ; VALIDATE [VPC]
|
||
|
||
1B4E ; [VPOINT] POINTS TO ABS ADDR OF TARGET V-PAGE
|
||
|
||
1B4E ; PUT BITS 0 THRU 7 OF GPC INTO <Y>
|
||
|
||
1B4E A588 GTBT2: LDA VPC0 ; PUT BIT 0 INTO <C>
|
||
1B50 4A LSR A
|
||
1B51 A586 LDA VPCL ; GET BITS 1-8
|
||
1B53 2A ROL A ; DON'T WORRY ABOUT BIT 8
|
||
1B54 A8 TAY
|
||
|
||
1B55 B18A LDA (VPOINT),Y ; GET A V-BYTE
|
||
|
||
1B57 ; INCREMENT [VPC]
|
||
1B57 ; IF CROSSING A !RAM! PAGE ADJUST [GPOINT]
|
||
1B57 ; IF CROSSING A V-PAGE INVALIDATE FLAG
|
||
|
||
1B57 48 PHA ; SAVE THE BYTE
|
||
|
||
1B58 A588 LDA VPC0 ; EFFECTIVLY ADD 1
|
||
1B5A 4901 EOR #$01
|
||
1B5C 8588 STA VPC0
|
||
1B5E D015 BNE GTBT3 ; BRANCH NO CARRY
|
||
|
||
1B60 E686 INC VPCL
|
||
1B62 F00B BEQ GTBT4 ; BRANCH CROSSED V-PAGE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MEMORY MANAGEMENT PAGE 92
|
||
--- PAGING ROUTINES ---
|
||
|
||
|
||
1B64 A586 LDA VPCL ; TEST FOR CROSS !RAM! PAGE
|
||
1B66 297F AND #$7F
|
||
1B68 D00B BNE GTBT3 ; BRANCH NO CROSS
|
||
|
||
1B6A E68B INC VPOINT+HI ; ADJUST RAM POINTER
|
||
1B6C 4C751B JMP GTBT3
|
||
|
||
1B6F E687 GTBT4: INC VPCH ; CROSS V-PAGE
|
||
1B71 A900 LDA #00
|
||
1B73 8589 STA VPCFLG ; INVALIDATE FLAG
|
||
|
||
1B75 68 GTBT3: PLA ; RESTORE BYTE
|
||
1B76 A8 TAY ; SET FLAGS
|
||
1B77 60 RTS
|
||
|
||
1B78 ; -------------------------------
|
||
1B78 ; LOCATE A PAGE OF VIRTUAL MEMORY
|
||
1B78 ; -------------------------------
|
||
|
||
1B78 ;-----------------------------------------------------------------
|
||
1B78 ; A VIRTUAL PAGE IS 512 BYTES OF VIRTUAL MEMORY.
|
||
1B78 ; WHEN PAGED INTO MACHINE RAM IT MUST OCCUPY TWO CONSECUTIVE
|
||
1B78 ; 256 BYTE !RAM! PAGES.
|
||
1B78 ;
|
||
1B78 ; [PAGMAP],BUFFER RETURN THE V-PAGE IN THAT BUFFFER
|
||
1B78 ; (A BUFFER IS TWO CONSECUTIVE RAM PAGES)
|
||
1B78 ; [MEMMAP],VPAGE RETURNS RAM PAGE LOWER HALF OF VPAGE IS IN
|
||
1B78 ;
|
||
1B78 ; [PAGE0] - RAM PAGE WHERE BUFFER(0) STARTS
|
||
1B78 ;-----------------------------------------------------------------
|
||
|
||
1B78 ; ENTRY: V-BLOCK TO SEARCH FOR IN [X]
|
||
1B78 ; EXIT: ABSOLUTE PAGE ADDRESS IN [A]
|
||
|
||
1B78 86EB PAGE: STX DBLOCK ; GIVE TARGET V-PAGE TO GROS
|
||
|
||
1B7A ; DE-ALLOCATE THE EARLIEST V-PAGE
|
||
|
||
1B7A 20D61B PGE1: JSR EARLY ; GET INDEX OF EARLIEST BUFFER INTO [SWAP]
|
||
|
||
1B7D A49A LDY SWAP
|
||
1B7F BE0008 LDX PAGMAP,Y ; GET V-PAGE OF EARLIEST BUFFER
|
||
1B82 F005 BEQ PGE2 ; 0 = NO PAGE IN BUFFER
|
||
1B84 A900 LDA #0
|
||
1B86 9D0007 STA MEMMAP,X ; ZERO THE [MEMMAP] ENTRY
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MEMORY MANAGEMENT PAGE 93
|
||
--- PAGING ROUTINES ---
|
||
|
||
1B89 ; SPLICE THE TARGET PAGE INTO THE BUFFER MAP
|
||
|
||
1B89 A5EB PGE2: LDA DBLOCK ; TARGET V-PAGE
|
||
1B8B 990008 STA PAGMAP,Y ; ADD IT TO BUFFER MAP
|
||
1B8E AA TAX ; USE LATER FOR INDEX INTO [MEMMAP]
|
||
|
||
1B8F 98 TYA ; CALC THE ABSOLUTE ADDRESS
|
||
1B90 0A ASL A ; * 2 FOR 512 BYTE VPAGES
|
||
1B91 18 CLC ; OF THE
|
||
1B92 6596 ADC PAGE0 ; CORRESPONDING BUFFER
|
||
1B94 9D0007 STA MEMMAP,X ; TELL [MEMMAP] WHERE TO FIND THE PAGE
|
||
1B97 85EE STA DBUFF+HI ; TELL GROS WHERE THE BUFFER IS
|
||
|
||
1B99 859B STA TARGET ; SAVE HERE
|
||
1B9B 202722 JSR GETDSK ; GET PAGE [DBLOCK] INTO [DBUFF]
|
||
1B9E A59B LDA TARGET ; RESTORE BUFFER PAGE
|
||
|
||
1BA0 ; FALL THROUGH ...
|
||
|
||
1BA0 ; ----------------
|
||
1BA0 ; UPDATE TIMESTAMP
|
||
1BA0 ; ----------------
|
||
|
||
1BA0 ; ENTRY: ABS BUFFER PAGE OF V-BLOCK
|
||
|
||
1BA0 859B UPTIME: STA TARGET ; SAVE FOR LATER
|
||
1BA2 38 SEC ; FORM A ZERO-ALIGNED
|
||
1BA3 E596 SBC PAGE0 ; INDEX
|
||
;***
|
||
1BA5 4A LSR A ; / 2 FOR 512 BYTE PAGES
|
||
;***
|
||
1BA6 A8 TAY ; INTO [LRUMAP]
|
||
1BA7 B98008 LDA LRUMAP,Y ; CHECK THIS PAGE'S STAMP
|
||
1BAA C598 CMP STAMP ; SAME AS CURRENT STAMP?
|
||
1BAC F025 BEQ UT3 ; EXIT NOW IF SO
|
||
|
||
1BAE E698 INC STAMP ; ELSE UPDATE STAMP
|
||
1BB0 D01C BNE UT2 ; CONTINUE IF NO OVERFLOW
|
||
|
||
1BB2 ; HANDLE STAMP OVERFLOW
|
||
|
||
1BB2 20EF1B JSR EARLY2 ; GET EARLIEST STAMP INTO [LRU]
|
||
1BB5 A200 LDX #0 ; INIT INDEX
|
||
1BB7 BD8008 UT0: LDA LRUMAP,X ; ELSE GET A STAMP READING
|
||
1BBA F006 BEQ UT1 ; EXIT IF ZERO
|
||
1BBC 38 SEC ; SUBTRACT OFF
|
||
1BBD E599 SBC LRU ; EARLIEST STAMP READING
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MEMORY MANAGEMENT PAGE 94
|
||
--- PAGING ROUTINES ---
|
||
|
||
1BBF 9D8008 STA LRUMAP,X ; REPLACE IN MAP
|
||
1BC2 E8 UT1: INX
|
||
1BC3 E497 CPX PMAX ; LOOP TILL
|
||
1BC5 90F0 BCC UT0 ; ALL STAMPS FIXED
|
||
|
||
1BC7 A900 LDA #0 ; TURN BACK
|
||
1BC9 38 SEC ; THE CLOCK
|
||
1BCA E599 SBC LRU ; TO REFLECT STAMP FUDGING
|
||
1BCC 8598 STA STAMP
|
||
|
||
1BCE A598 UT2: LDA STAMP ; STAMP BUFFER [Y]
|
||
1BD0 998008 STA LRUMAP,Y ; WITH THE NEW STAMP
|
||
|
||
1BD3 A59B UT3: LDA TARGET ; RESTORE BUFFER ADDR
|
||
1BD5 60 RTS
|
||
|
||
1BD6 ; --------------------------------
|
||
1BD6 ; LOCATE EARLIEST ACTIVE TIMESTAMP
|
||
1BD6 ; --------------------------------
|
||
|
||
1BD6 ; EXIT: [LRU] = EARLIEST TIMESTAMP
|
||
1BD6 ; [SWAP] = INDEX TO EARLIEST BUFFER
|
||
|
||
1BD6 A200 EARLY: LDX #0 ; INIT INDEX
|
||
1BD8 869A STX SWAP
|
||
1BDA AD8008 LDA LRUMAP ; GET TIMESTAMP OF BUFFER #0
|
||
1BDD E8 INX ; START COMPARE WITH BUFFER #1
|
||
|
||
1BDE DD8008 EAR0: CMP LRUMAP,X ; IS THIS STAMP EARLIER THAN [A]?
|
||
1BE1 9005 BCC EAR1 ; IF STILL SMALLER, TRY NEXT STAMP
|
||
|
||
1BE3 BD8008 LDA LRUMAP,X ; ELSE CHANGE EARLIEST ENTRY
|
||
1BE6 869A STX SWAP ; AND UPDATE BUFFER INDEX
|
||
|
||
1BE8 E8 EAR1: INX
|
||
1BE9 E497 CPX PMAX ; OUT OF BUFFERS?
|
||
1BEB 90F1 BCC EAR0 ; LOOP TILL EMPTY
|
||
1BED 60 RTS ; [SWAP] HAS INDEX TO EARLIEST BUFFER
|
||
|
||
1BEE ; THIS IS FOR OVERFLOW, IGNORES 0 ENTRIES
|
||
|
||
1BEE 00 SAVEY: DB 0
|
||
|
||
1BEF A200 EARLY2: LDX #0 ; INIT INDEX
|
||
1BF1 869A STX SWAP
|
||
1BF3 8CEE1B STY SAVEY
|
||
1BF6 BD8008 EAR23: LDA LRUMAP,X ; GET TIMESTAMP OF BUFFER #0
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MEMORY MANAGEMENT PAGE 95
|
||
--- PAGING ROUTINES ---
|
||
|
||
1BF9 C900 CMP #0 ; DON'T USE A ZERO VALUE
|
||
1BFB D007 BNE EAR22 ; OK, NOT 0
|
||
1BFD E8 INX
|
||
1BFE E497 CPX PMAX ; OUT OF BUFFERS?
|
||
1C00 90F4 BCC EAR23 ; NO, KEEP LOOKING
|
||
1C02 B013 BCS EAR24 ; YUP, SO WILL HAVE TO USE 0
|
||
|
||
1C04 E8 EAR22: INX ; START COMPARE WITH NEXT BUFFER
|
||
|
||
1C05 DD8008 EAR20: CMP LRUMAP,X ; IS THIS STAMP EARLIER THAN [A]?
|
||
1C08 9008 BCC EAR21 ; IF STILL SMALLER, TRY NEXT STAMP
|
||
|
||
1C0A BC8008 LDY LRUMAP,X
|
||
1C0D F003 BEQ EAR21
|
||
1C0F 98 TYA
|
||
1C10 869A STX SWAP
|
||
|
||
1C12 E8 EAR21: INX
|
||
1C13 E497 CPX PMAX ; OUT OF BUFFERS?
|
||
1C15 90EE BCC EAR20 ; LOOP TILL EMPTY
|
||
|
||
1C17 8599 EAR24: STA LRU ; [A] HAS EARLIEST STAMP
|
||
; CMP #2 ; DON'T MAKE IT 0
|
||
; BCC EAR25
|
||
1C19 C699 DEC LRU ; MAKE SO END RESULT NOT 0
|
||
1C1B ACEE1B EAR25: LDY SAVEY
|
||
1C1E 60 RTS ; [SWAP] HAS INDEX TO EARLIEST BUFFER
|
||
END
|
||
|
||
INCLUD MACHINE.ASM ; M
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 96
|
||
--- MACHINE-DEPENDENT ROUTINES: ATARI ---
|
||
|
||
|
||
1C1F ; ------------
|
||
1C1F ; CLEAR SCREEN
|
||
1C1F ; ------------
|
||
|
||
1C1F ; CLEAR SCREEN TO WHITE IF [ARG1] NEGATIVE
|
||
1C1F ; CLEAR SCREEN TO BLACK IF [ARG1] POSITIVE
|
||
|
||
1C1F A900 GCLEAR: LDA #LOW SCREEN ; MAKE [I] POINT TO
|
||
1C21 857A STA I+LO ; THE 1ST BYTE OF
|
||
1C23 A9A1 LDA #HIGH SCREEN ; SCREEN RAM
|
||
1C25 857B STA I+HI
|
||
|
||
1C27 A21E LDX #30 ; # PAGES TO CLEAR
|
||
1C29 A000 LDY #0 ; INIT LOOP INDEX
|
||
|
||
1C2B A56E LDA ARG1+HI ; IF [ARG1]
|
||
1C2D 3004 BMI GCLSN ; NEGATIVE CLEAR TO WHITE
|
||
1C2F A900 LDA #00
|
||
1C31 F002 BEQ GCLS ; CLEAR SCREEN TO BLACK
|
||
1C33 A9FF GCLSN: LDA #$FF ; ELSE CLEAR TO WHITE
|
||
1C35 917A GCLS: STA (I),Y
|
||
1C37 C8 INY
|
||
1C38 D0FB BNE GCLS
|
||
1C3A E67B INC I+HI
|
||
1C3C CA DEX
|
||
1C3D D0F6 BNE GCLS
|
||
1C3F 60 RTS
|
||
|
||
1C40 ; ------------------------
|
||
1C40 ; TEXT (ATARI SCREEN CODE)
|
||
1C40 ; ------------------------
|
||
|
||
1C40 296E7465 ERRM: DB 41,110,116,101,114,110,97,108,0 ; INTERNAL
|
||
1C49 2572726F DB 37,114,114,111,114,0,3,0 ; ERROR #
|
||
0011 ERRML EQU $-ERRM
|
||
|
||
1C51 252E2400 ENDM: DB 37,46,36,0,47,38,0 ; END OF
|
||
1C58 33253333 DB 51,37,51,51,41,47,46 ; SESSION
|
||
000E ENDML EQU $-ENDM
|
||
|
||
1C5F ; -----
|
||
1C5F ; ERROR
|
||
1C5F ; -----
|
||
|
||
1C5F ; ENTRY: ERROR CODE IN [A]
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 97
|
||
--- MACHINE-DEPENDENT ROUTINES: ATARI ---
|
||
|
||
1C5F 8500 GERROR: STA $00 ; SAVE ERROR CODE
|
||
1C61 20A61C JSR STATUS ; SET UP STATUS LINE
|
||
|
||
1C64 A240 LDX #LOW ERRM ; GET LSB
|
||
1C66 A91C LDA #HIGH ERRM ; AND MSB OF TEXT ADDRESS
|
||
1C68 A011 LDY #ERRML ; AND ITS LENGTH
|
||
1C6A 20E51C JSR PRINT ; PRINT "INTERNAL ERROR #"
|
||
|
||
1C6D A500 LDA $00 ; RETRIEVE ERROR CODE
|
||
1C6F 20CE1C JSR HEX ; DISPLAY IT IN HEX
|
||
1C72 A900 LDA #0
|
||
1C74 20DD1C JSR CHAR ; PRINT A SPACE
|
||
1C77 4C811C JMP GOVER ; AND PRINT "GAME OVER"
|
||
|
||
1C7A ; ----
|
||
1C7A ; QUIT
|
||
1C7A ; ----
|
||
|
||
1C7A 20A61C GQUIT: JSR STATUS ; SET UP MESSAGE LINE
|
||
1C7D A90D LDA #13
|
||
1C7F 85F5 STA CURSOR ; CENTER TEXT
|
||
|
||
1C81 A251 GOVER: LDX #LOW ENDM ; LSB AND
|
||
1C83 A91C LDA #HIGH ENDM ; MSB OF TEXT ADDRESS
|
||
1C85 A00E LDY #ENDML ; LENGTH
|
||
1C87 20E51C JSR PRINT ; PRINT "GAME OVER"
|
||
|
||
1C8A AD1FD0 HOLD: LDA CONSOL ; WAIT FOR CONSOLE KEYPRESS
|
||
1C8D C907 CMP #7
|
||
1C8F F0F9 BEQ HOLD
|
||
1C91 AD1FD0 LETGO: LDA CONSOL ; WAIT FOR KEY RELEASE
|
||
1C94 C907 CMP #7
|
||
1C96 D0F9 BNE LETGO
|
||
|
||
1C98 4CEB0B JMP COLD ; AND DO A COLDSTART
|
||
|
||
1C9B ; -----------------
|
||
1C9B ; CLEAR STATUS LINE
|
||
1C9B ; -----------------
|
||
|
||
1C9B A24F NEWLIN: LDX #79
|
||
1C9D A900 LDA #0
|
||
1C9F 9DA003 NEWL0: STA TEXT,X
|
||
1CA2 CA DEX
|
||
1CA3 10FA BPL NEWL0
|
||
1CA5 60 RTS
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 98
|
||
--- MACHINE-DEPENDENT ROUTINES: ATARI ---
|
||
|
||
1CA6 ; ------------------
|
||
1CA6 ; SET UP STATUS LINE
|
||
1CA6 ; ------------------
|
||
|
||
1CA6 ; FOR ERRORS & DEBUGGER
|
||
|
||
1CA6 209B1C STATUS: JSR NEWLIN
|
||
|
||
1CA9 A900 LDA #0
|
||
1CAB 85F5 STA CURSOR
|
||
|
||
1CAD A215 LDX #LOW DL1 ; TELL THE D-LIST WHERE
|
||
1CAF A90B LDA #HIGH DL1 ; TO START ITSELF
|
||
1CB1 8EE90B STX DLTOP+LO
|
||
1CB4 8DEA0B STA DLTOP+HI
|
||
1CB7 8E3002 STX SDLSTL+LO ; ALSO TELL ANTIC
|
||
1CBA 8D3102 STA SDLSTL+HI ; WHERE TO FIND OUR LIST
|
||
1CBD 60 RTS
|
||
|
||
1CBE ; ----------------
|
||
1CBE ; PRINT [A] IN HEX
|
||
1CBE ; ----------------
|
||
|
||
1CBE ; HEX CHARS IN ATARI SCREEN CODE
|
||
|
||
1CBE 10111213 HCHARS: DB 16,17,18,19,20,21,22,23,24,25 ; 0-9
|
||
1CC8 21222324 DB 33,34,35,36,37,38 ; A-F
|
||
|
||
1CCE 48 HEX: PHA ; SAVE HERE
|
||
1CCF 4A LSR A ; SHIFT TOP NIBBLE
|
||
1CD0 4A LSR A ; INTO POSITION
|
||
1CD1 4A LSR A
|
||
1CD2 4A LSR A
|
||
1CD3 20D71C JSR NIBBLE ; AND PRINT IT
|
||
1CD6 68 PLA ; RETRIEVE BYTE
|
||
|
||
1CD7 290F NIBBLE: AND #%00001111 ; ISOLATE BITS 3-0
|
||
1CD9 AA TAX
|
||
1CDA BDBE1C LDA HCHARS,X
|
||
|
||
1CDD ; FALL THROUGH ...
|
||
|
||
1CDD ; -----------------
|
||
1CDD ; PRINT CHAR IN [A]
|
||
1CDD ; -----------------
|
||
|
||
1CDD A6F5 CHAR: LDX CURSOR
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 99
|
||
--- MACHINE-DEPENDENT ROUTINES: ATARI ---
|
||
|
||
1CDF 9DA003 STA TEXT,X
|
||
1CE2 E6F5 INC CURSOR
|
||
1CE4 60 RTS
|
||
|
||
1CE5 ; ----------
|
||
1CE5 ; PRINT TEXT
|
||
1CE5 ; ----------
|
||
|
||
1CE5 ; ENTRY: TEXT ADDRESS IN [X/A] (LSB/MSB)
|
||
1CE5 ; TEXT LENGTH IN [Y]
|
||
|
||
1CE5 86F2 PRINT: STX LINE+LO ; LSB OF ADDRESS
|
||
1CE7 85F3 STA LINE+HI ; MSB OF ADDRESS
|
||
1CE9 84F4 STY LEN ; LENGTH
|
||
|
||
1CEB A000 LDY #0
|
||
1CED A6F5 LDX CURSOR
|
||
1CEF B1F2 PR0: LDA (LINE),Y
|
||
1CF1 9DA003 STA TEXT,X
|
||
1CF4 E8 INX
|
||
1CF5 C8 INY
|
||
1CF6 C6F4 DEC LEN
|
||
1CF8 D0F5 BNE PR0
|
||
1CFA 86F5 STX CURSOR
|
||
1CFC 60 RTS
|
||
|
||
1CFD ; ------
|
||
1CFD ; MEMTOP
|
||
1CFD ; ------
|
||
|
||
1CFD ; EXIT: [A]=$A0 IF 48K, ELSE [A]=0
|
||
|
||
1CFD A900 MEMTOP: LDA #0 ; CLEAR $A000
|
||
1CFF 8D00A0 STA $A000
|
||
1D02 AE00A0 LDX $A000 ; CHECK THE VALUE
|
||
1D05 D002 BNE EMPTY ; RETURN [A]=0 IF NON-ZERO
|
||
1D07 A9A0 LDA #$A0 ; ELSE RETURN $A0
|
||
1D09 60 EMPTY: RTS
|
||
|
||
1D0A ; ------
|
||
1D0A ; RANDOM
|
||
1D0A ; ------
|
||
|
||
1D0A ; EXIT: RANDOM 16-BIT WORD IN [X/A]
|
||
|
||
1D0A AD0AD2 DORAND: LDA RANDOM
|
||
1D0D EA NOP ; A PAUSE ...
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 100
|
||
--- MACHINE-DEPENDENT ROUTINES: ATARI ---
|
||
|
||
1D0E AE0AD2 LDX RANDOM
|
||
1D11 60 RTS
|
||
|
||
1D12 ; ------------
|
||
1D12 ; SIMPLE DELAY
|
||
1D12 ; ------------
|
||
|
||
1D12 ; ENTRY: NEGATIVE JIFFY COUNT IN [VALUE]
|
||
|
||
1D12 A900 DELAY: LDA #0 ; WAIT A JIFFY
|
||
1D14 8514 STA RTCLOK
|
||
1D16 A514 DEL1: LDA RTCLOK
|
||
1D18 F0FC BEQ DEL1
|
||
|
||
1D1A E678 INC VALUE+LO
|
||
1D1C D0F4 BNE DELAY
|
||
1D1E E679 INC VALUE+HI
|
||
1D20 D0F0 BNE DELAY
|
||
|
||
1D22 F019 BEQ MOVED ; GET A VALUE AND RETURN
|
||
|
||
1D24 ; -----
|
||
1D24 ; INPUT
|
||
1D24 ; -----
|
||
|
||
1D24 A56D GINPUT: LDA ARG1+LO ; MOVE [ARG1] INTO [VALUE]
|
||
1D26 8578 STA VALUE+LO
|
||
1D28 A56E LDA ARG1+HI
|
||
1D2A 8579 STA VALUE+HI
|
||
|
||
1D2C A56C LDA NARGS ; IF THERE ARE 2 ARGS THEN DO THE TABLE
|
||
1D2E C901 CMP #1 ; ITERATIONS
|
||
1D30 F003 BEQ NOIT
|
||
1D32 4CAC17 JMP ITRATE ; YES VIRGINIA, A JUMP
|
||
|
||
1D35 A579 NOIT: LDA VALUE+HI
|
||
1D37 30D9 BMI DELAY ; DO A SIMPLE DELAY
|
||
|
||
1D39 0578 ORA VALUE+LO ; IF NON-ZERO,
|
||
1D3B D006 BNE TICK ; ENTER SENSE LOOP
|
||
|
||
1D3D 205D1D MOVED: JSR SENSE ; ELSE READ JUST ONCE
|
||
1D40 4C600F MOVED2: JMP PUTBYT ; ELSE RETURN [A]
|
||
|
||
1D43 ; INPUT SENSE LOOP
|
||
|
||
1D43 205D1D TICK: JSR SENSE ; GET READING INTO [A]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 101
|
||
--- MACHINE-DEPENDENT ROUTINES: ATARI ---
|
||
|
||
1D46 C98F CMP #%10001111 ; ANY INPUT?
|
||
1D48 D0F6 BNE MOVED2 ; YES, RETURN IT
|
||
|
||
1D4A A900 LDA #0 ; ELSE WAIT 1 JIFFY
|
||
1D4C 8514 STA RTCLOK
|
||
1D4E A514 TICK1: LDA RTCLOK
|
||
1D50 F0FC BEQ TICK1
|
||
|
||
1D52 200610 JSR DECVAL ; DECREMENT COUNT
|
||
1D55 A578 LDA VALUE+LO
|
||
1D57 0579 ORA VALUE+HI ; ZERO YET?
|
||
1D59 D0E8 BNE TICK ; NO, LOOP BACK
|
||
|
||
1D5B F0E0 BEQ MOVED ; RETURN
|
||
|
||
1D5D ; -------------------------
|
||
1D5D ; CHECK KEYBOARD & JOYSTICK
|
||
1D5D ; -------------------------
|
||
|
||
1D5D ; EXIT: INPUT STATUS IN [A]
|
||
|
||
1D5D A900 SENSE: LDA #0
|
||
1D5F 854D STA ATRACT ; KILL ATTRACT MODE
|
||
|
||
1D61 ADFC02 LDA CH ; READ THE KEYBOARD REGISTER
|
||
1D64 C9FF CMP #$FF ; KEY PRESSED YET?
|
||
1D66 F01B BEQ STICK ; IF NOT, CHECK STICK
|
||
|
||
1D68 A8 TAY ; ELSE SAVE KEYCODE HERE
|
||
1D69 A2FF LDX #$FF ; RESET THE
|
||
1D6B 8EFC02 STX CH ; KEYBOARD REGISTER
|
||
1D6E 29C0 AND #%11000000 ; SHIFT OR CTRL CHAR?
|
||
1D70 D011 BNE STICK ; IGNORE IF SO
|
||
|
||
1D72 B9921D LDA ATASCI,Y ; GET ATASCII CODE INTO [A]
|
||
|
||
1D75 C961 CMP #'a' ; CONVERT TO
|
||
1D77 9007 BCC KEXIT ; UPPER CASE ALPHA
|
||
1D79 C97B CMP #'z'+1 ; IF NECESSARY
|
||
1D7B B003 BCS KEXIT
|
||
1D7D 38 SEC
|
||
1D7E E920 SBC #$20
|
||
|
||
1D80 297F KEXIT: AND #%01111111 ; MAKE SURE IT'S POSITIVE
|
||
1D82 60 RTS
|
||
|
||
1D83 ; CHECK THE JOYSTICK
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 102
|
||
--- MACHINE-DEPENDENT ROUTINES: ATARI ---
|
||
|
||
|
||
1D83 AD7802 STICK: LDA STICK0
|
||
1D86 290F AND #%00001111 ; MASK GARBAGE
|
||
1D88 AE8402 LDX STRIG0 ; ALSO CHECK TRIGGER
|
||
1D8B D002 BNE STIKEX ; EXIT IF NOT PRESSED
|
||
1D8D 0910 ORA #%00010000 ; ELSE SET BIT 4
|
||
|
||
1D8F 0980 STIKEX: ORA #%10000000 ; NEGATIVE FOR STICK READING
|
||
1D91 60 RTS ; RETURN WITH CODE IN [A]
|
||
|
||
1D92 ; ------------------------
|
||
1D92 ; ATASCII CONVERSION TABLE
|
||
1D92 ; ------------------------
|
||
|
||
1D92 6C6A3B8A ATASCI: DB $6C,$6A,$3B,$8A,$8B,$6B,$2B,$2A
|
||
1D9A 6F807075 DB $6F,$80,$70,$75,$9B,$69,$2D,$3D
|
||
1DA2 7680638C DB $76,$80,$63,$8C,$8D,$62,$78,$7A
|
||
1DAA 34803336 DB $34,$80,$33,$36,$1B,$35,$32,$31
|
||
1DB2 2C202E6E DB $2C,$20,$2E,$6E,$80,$6D,$2F,$81
|
||
1DBA 72806579 DB $72,$80,$65,$79,$7F,$74,$77,$71
|
||
1DC2 39803037 DB $39,$80,$30,$37,$7E,$38,$3C,$3E
|
||
1DCA 66686480 DB $66,$68,$64,$80,$82,$67,$73,$61
|
||
|
||
1DD2 ; --------------------
|
||
1DD2 ; DUMP BLOCK TO SCREEN
|
||
1DD2 ; --------------------
|
||
|
||
1DD2 ; ENTRY: BLOCK TO DUMP IN [BLOCK] (TOP BYTE IN [BLOCK+7])
|
||
1DD2 ; X-COORDINATE IN [X], Y-COORDINATE IN [A]
|
||
|
||
1DD2 86E4 DUMP: STX TOX ; SAVE X-COORDINATE
|
||
1DD4 0A ASL A ; MULTIPLY Y-COORD BY 8
|
||
1DD5 0A ASL A ; TO GET MODE LINE (0-191)
|
||
1DD6 0A ASL A
|
||
1DD7 A8 TAY ; USE AS INDEX
|
||
|
||
1DD8 A207 LDX #7 ; INIT BLOCK-FETCHING INDEX
|
||
|
||
1DDA B90009 DUMP0: LDA VLOWS,Y ; GET LSB OF LINE ADDR
|
||
1DDD 18 CLC
|
||
1DDE 65E4 ADC TOX ; ADD X-POS
|
||
1DE0 8DEE1D STA TOADR+LO ; TO GET LSB OF SCREEN ADDR
|
||
1DE3 B9C009 LDA VHIGHS,Y ; GET MSB OF LINE ADDR
|
||
1DE6 6900 ADC #0
|
||
1DE8 8DEF1D STA TOADR+HI ; FORM MSB OF SCREEN ADDR
|
||
|
||
1DEB B5D3 LDA BLOCK,X ; GET BLOCK DATA
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 103
|
||
--- MACHINE-DEPENDENT ROUTINES: ATARI ---
|
||
|
||
|
||
1DED 8D DB $8D ; 6502 "STA nnnn" INSTRUCTION
|
||
1DEE 0000 TOADR: DW $0000 ; SCREEN RAM ADDRESS
|
||
|
||
1DF0 C8 INY ; NEXT SCAN LINE
|
||
1DF1 CA DEX ; DONE 8 BYTES YET?
|
||
1DF2 10E6 BPL DUMP0 ; NO, FETCH MORE
|
||
1DF4 60 RTS
|
||
|
||
1DF5 ; -----------------------------------------------
|
||
1DF5 ; DUMP BLOCK TO SCREEN WITH MASK
|
||
1DF5 ;
|
||
1DF5 ; IF THE MASK BIT IS 1 THEN THE SCREEN SHOWS THRU
|
||
1DF5 ; IF THE MASK BIT IS 0 THEN THE ICON IS DISPLAYED
|
||
1DF5 ; -----------------------------------------------
|
||
|
||
1DF5 ; ENTRY: BLOCK TO DUMP IN [BLOCK] (TOP BYTE IN [BLOCK+7])
|
||
1DF5 ; MASK IN [MASK]
|
||
1DF5 ; X-COORDINATE IN [X], Y-COORDINATE IN [A]
|
||
|
||
1DF5 86E4 DMPMSK: STX TOX ; SAVE X-COORDINATE
|
||
1DF7 0A ASL A ; MULTIPLY Y-COORD BY 8
|
||
1DF8 0A ASL A ; TO GET MODE LINE (0-191)
|
||
1DF9 0A ASL A
|
||
1DFA A8 TAY ; USE AS INDEX
|
||
|
||
1DFB A207 LDX #7 ; INIT BLOCK-FETCHING INDEX
|
||
|
||
1DFD B90009 DMSK0: LDA VLOWS,Y ; GET LSB OF LINE ADDR
|
||
1E00 18 CLC
|
||
1E01 65E4 ADC TOX ; ADD X-POS
|
||
1E03 8D151E STA TOADR2+LO+1 ; TO GET LSB OF SCREEN ADDR
|
||
1E06 8D1E1E STA TOADR3+LO+1
|
||
1E09 B9C009 LDA VHIGHS,Y ; GET MSB OF LINE ADDR
|
||
1E0C 6900 ADC #0
|
||
1E0E 8D161E STA TOADR2+HI+1 ; FORM MSB OF SCREEN ADDR
|
||
1E11 8D1F1E STA TOADR3+HI+1
|
||
|
||
1E14 ADFFFF TOADR2: LDA $FFFF ; DUMMY GET SCREEN BYTE
|
||
1E17 55D3 EOR BLOCK,X
|
||
1E19 35DB AND MASK,X
|
||
1E1B 55D3 EOR BLOCK,X
|
||
1E1D 8DFFFF TOADR3: STA $FFFF ; DUMMY PUT BACK ON SCREEN
|
||
|
||
1E20 C8 INY ; NEXT SCAN LINE
|
||
1E21 CA DEX ; DONE 8 BYTES YET?
|
||
1E22 10D9 BPL DMSK0 ; NO, FETCH MORE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 104
|
||
--- MACHINE-DEPENDENT ROUTINES: ATARI ---
|
||
|
||
1E24 60 RTS
|
||
|
||
1E25 ; -----
|
||
1E25 ; SOUND
|
||
1E25 ; -----
|
||
|
||
1E25 ; PLAY SOUND [ARG1] (1-127)
|
||
|
||
1E25 A56D GSOUND: LDA ARG1+LO
|
||
1E27 3018 BMI SNDERR ; RANGE ERROR!
|
||
1E29 C905 CMP #SOUNDS+1
|
||
1E2B B014 BCS SNDERR ; SOUND NOT DEFINED
|
||
|
||
1E2D 38 SEC
|
||
1E2E E901 SBC #1 ; ZERO-ALIGN
|
||
1E30 0A ASL A ; AND WORD-ALIGN
|
||
1E31 AA TAX ; THE SOUND ID INDEX
|
||
1E32 BD561F LDA STABLE+LO,X ; GET LSB OF EXECUTION ADDR
|
||
1E35 8D3F1E STA PLAY+LO
|
||
1E38 BD571F LDA STABLE+HI,X ; AND MSB
|
||
1E3B 8D401E STA PLAY+HI
|
||
|
||
1E3E 4C DB $4C ; 6502 "JMP" INSTRUCTION
|
||
1E3F 0000 PLAY: DW $0000 ; SOUND JUMP VECTOR
|
||
|
||
1E41 ; *** ERROR #13: UNDEFINED SOUND ***
|
||
|
||
1E41 A90D SNDERR: LDA #13
|
||
1E43 4C5F1C JMP GERROR
|
||
|
||
1E46 ; -----
|
||
1E46 ; COPY?
|
||
1E46 ; -----
|
||
|
||
1E46 ; IS THIS A LEGAL COPY OF THE DISK?
|
||
|
||
0FAE GCOPYP EQU PREDS
|
||
|
||
1E46 ; -------
|
||
1E46 ; VERIFY?
|
||
1E46 ; -------
|
||
|
||
1E46 ; ARE THE GAME AND IMAGE FILES INTACT?
|
||
1E46 ; NOTE: THIS DOES NOT OBSERVE EXTRA BIT LOW
|
||
1E46 ; BUT USES EXTRA BIT HIGH! Le
|
||
|
||
1E46 A900 GVERP: LDA #0 ; CLEAR
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 105
|
||
--- MACHINE-DEPENDENT ROUTINES: ATARI ---
|
||
|
||
1E48 857C STA J+LO ; ACCUM FOR CHECKSUM
|
||
1E4A 857D STA J+HI
|
||
1E4C 857E STA K+LO
|
||
1E4E 85EB STA DBLOCK ; START AT 1ST GAME SECTOR
|
||
1E50 8587 STA VPCH ; START @ BYTE 0064
|
||
1E52 8588 STA VPC0 ; USE AS HIGH BIT
|
||
1E54 A940 LDA #64 ; 64 W/LOW BIT IN VPC0
|
||
1E56 8586 STA VPCL
|
||
|
||
1E58 AD1223 LDA GBEGIN+GLEN ; SET BYTE LENGTH
|
||
1E5B 857B STA I+HI ; FOR GAME CHECK
|
||
1E5D AD1323 LDA GBEGIN+GLEN+1 ; (LENGTH IN WORDS -
|
||
1E60 0A ASL A ; SO MULTIPLY BY 2
|
||
1E61 857A STA I+LO ; TO GET BYTES
|
||
1E63 267B ROL I+HI
|
||
1E65 267E ROL K+LO
|
||
1E67 4C6E1E JMP READIN ; READ 1ST PAGE IN
|
||
|
||
1E6A A586 VSUM: LDA VPCL ; NEW PAGE?
|
||
1E6C D018 BNE VSUM2 ; NO, CONTINUE
|
||
1E6E A200 READIN: LDX #0 ; SET UP FOR GETDSK
|
||
1E70 86EC STX DBTOP
|
||
1E72 86F1 STX DCNT
|
||
1E74 E8 INX
|
||
1E75 8E0103 STX DUNIT
|
||
|
||
1E78 A952 LDA #$52 ; "READ"
|
||
1E7A 8D0203 STA DCOMND
|
||
1E7D A904 LDA #HIGH BUFFER ; NO MOVE
|
||
1E7F 85EE STA DBUFF+HI
|
||
1E81 A5EB LDA DBLOCK
|
||
1E83 205222 JSR GETGME
|
||
|
||
1E86 A486 VSUM2: LDY VPCL ; GET THIS BYTE
|
||
1E88 B90004 LDA BUFFER,Y
|
||
1E8B E686 INC VPCL ; SET FOR NEXT BYTE
|
||
1E8D D006 BNE VSUM3
|
||
1E8F E687 INC VPCH
|
||
1E91 D002 BNE VSUM3
|
||
1E93 E688 INC VPC0
|
||
|
||
1E95 18 VSUM3: CLC
|
||
1E96 657C ADC J+LO ; ADD IT TO ACCUM
|
||
1E98 857C STA J+LO
|
||
1E9A 9002 BCC VSUM0
|
||
1E9C E67D INC J+HI
|
||
1E9E A586 VSUM0: LDA VPCL ; CHECK IF ALL BYTES DONE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 106
|
||
--- MACHINE-DEPENDENT ROUTINES: ATARI ---
|
||
|
||
1EA0 C57A CMP I+LO
|
||
1EA2 D0C6 BNE VSUM
|
||
1EA4 A587 LDA VPCH
|
||
1EA6 C57B CMP I+HI
|
||
1EA8 D0C0 BNE VSUM
|
||
1EAA A588 LDA VPC0
|
||
1EAC C57E CMP K+LO
|
||
1EAE D0BA BNE VSUM ; AS WORD ALIGNED SIZE
|
||
|
||
1EB0 AD1423 LDA GBEGIN+GCHECK
|
||
1EB3 C57D CMP J+HI
|
||
1EB5 F003 BEQ VSUM4
|
||
1EB7 4C531F JMP BADVER ; OOPS
|
||
1EBA AD1523 VSUM4: LDA GBEGIN+GCHECK+1
|
||
1EBD C57C CMP J+LO
|
||
1EBF F003 BEQ IFILE
|
||
1EC1 4C531F JMP BADVER
|
||
|
||
1EC4 ; GAME FILE OK, CHECK IMAGE FILE
|
||
|
||
1EC4 A900 IFILE: LDA #0
|
||
1EC6 857E STA K+LO
|
||
1EC8 A591 LDA ICODE+LO ; FIND VIRTUAL IBEGIN
|
||
1ECA 857C STA J+LO
|
||
1ECC A592 LDA ICODE+HI
|
||
1ECE 857D STA J+HI
|
||
1ED0 A000 LDY #ILEN ; OFFSET TO LENGTH
|
||
1ED2 B17C LDA (J),Y
|
||
1ED4 857B STA I+HI ; SET I TO LENGTH
|
||
1ED6 C8 INY
|
||
1ED7 B17C LDA (J),Y
|
||
1ED9 0A ASL A ; *2 AS WORD VALUE
|
||
1EDA 857A STA I+LO
|
||
1EDC 267B ROL I+HI
|
||
1EDE 267E ROL K+LO
|
||
|
||
1EE0 A004 LDY #ICHECK ; GET CHECKSUM
|
||
1EE2 B17C LDA (J),Y ; WHILE IT'S EASY
|
||
1EE4 85F7 STA CHKSUM+HI ; SAVE IT HERE
|
||
1EE6 C8 INY
|
||
1EE7 B17C LDA (J),Y
|
||
1EE9 85F6 STA CHKSUM+LO
|
||
|
||
1EEB A900 LDA #0 ; CLEAR FOR IMAGE FILE
|
||
1EED 857C STA J+LO
|
||
1EEF 857D STA J+HI
|
||
1EF1 8587 STA VPCH
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 107
|
||
--- MACHINE-DEPENDENT ROUTINES: ATARI ---
|
||
|
||
1EF3 8588 STA VPC0
|
||
1EF5 85EB STA DBLOCK ; SET TO START OF IMAGE SECTORS.
|
||
1EF7 A908 LDA #8
|
||
1EF9 8586 STA VPCL ; HEADER OF IMAGE FILE
|
||
1EFB 4C021F JMP IRDIN
|
||
|
||
1EFE A586 ISUM: LDA VPCL ; NEW PAGE?
|
||
1F00 D018 BNE ISUM2 ; NO, CONTINUE
|
||
1F02 A200 IRDIN: LDX #0 ; SET UP FOR GETDSK
|
||
1F04 86EC STX DBTOP
|
||
1F06 86F1 STX DCNT
|
||
1F08 E8 INX
|
||
1F09 8E0103 STX DUNIT
|
||
|
||
1F0C A952 LDA #$52 ; "READ"
|
||
1F0E 8D0203 STA DCOMND
|
||
1F11 A904 LDA #HIGH BUFFER ; NO MOVE
|
||
1F13 85EE STA DBUFF+HI
|
||
1F15 A5EB LDA DBLOCK
|
||
1F17 204122 JSR GETIMG
|
||
|
||
1F1A A486 ISUM2: LDY VPCL ; GET THIS BYTE
|
||
1F1C B90004 LDA BUFFER,Y
|
||
1F1F E686 INC VPCL ; SET FOR NEXT BYTE
|
||
1F21 D006 BNE ISUM3
|
||
1F23 E687 INC VPCH
|
||
1F25 D002 BNE ISUM3
|
||
1F27 E688 INC VPC0
|
||
|
||
1F29 18 ISUM3: CLC
|
||
1F2A 657C ADC J+LO ; ADD IT TO ACCUM
|
||
1F2C 857C STA J+LO
|
||
1F2E 9002 BCC ISUM0
|
||
1F30 E67D INC J+HI
|
||
1F32 A586 ISUM0: LDA VPCL ; CHECK IF ALL BYTES DONE
|
||
1F34 C57A CMP I+LO
|
||
1F36 D0C6 BNE ISUM
|
||
1F38 A587 LDA VPCH
|
||
1F3A C57B CMP I+HI
|
||
1F3C D0C0 BNE ISUM
|
||
1F3E A588 LDA VPC0
|
||
1F40 C57E CMP K+LO
|
||
1F42 D0BA BNE ISUM ; AS WORD ALIGNED SIZE
|
||
|
||
1F44 A5F6 LDA CHKSUM+LO ; COMPARE TO SAVED CHECKSUM
|
||
1F46 C57C CMP J+LO
|
||
1F48 D009 BNE BADVER
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 108
|
||
--- MACHINE-DEPENDENT ROUTINES: ATARI ---
|
||
|
||
1F4A A5F7 LDA CHKSUM+HI
|
||
1F4C C57D CMP J+HI
|
||
1F4E D003 BNE BADVER
|
||
|
||
1F50 4CAE0F JMP PREDS ; SUCCESS!
|
||
|
||
1F53 4CA20F BADVER: JMP PREDF
|
||
|
||
END
|
||
INCLUD SOUND.ASM ; M
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 109
|
||
GAME-DEPENDENT SOUND LIBRARY (ATARI FOOBLITSKY)
|
||
|
||
|
||
1F56 ; ----------------------------
|
||
1F56 ; GAME-DEPENDENT SOUND LIBRARY
|
||
1F56 ; ----------------------------
|
||
|
||
1F56 5E1F STABLE: DW SND1
|
||
1F58 661F DW SND2
|
||
1F5A 7C1F DW SND3
|
||
1F5C A61F DW SND4
|
||
|
||
0004 SOUNDS EQU 4 ; # SOUNDS IN LIBRARY
|
||
|
||
1F5E ; ----------------
|
||
1F5E ; SOUND #1: "BOOP"
|
||
1F5E ; ----------------
|
||
|
||
1F5E A296 SND1: LDX #150 ; FREQUENCY
|
||
1F60 A9FC LDA #252 ; DURATION (4 JIFFIES)
|
||
1F62 A0AE LDY #$AE ; FULL VOLUME, NO DISTORTION
|
||
1F64 D006 BNE NOISE
|
||
|
||
1F66 ; -----------------
|
||
1F66 ; SOUND #2: "CLICK"
|
||
1F66 ; -----------------
|
||
|
||
1F66 A219 SND2: LDX #25 ; FREQUENCY
|
||
1F68 A9FF LDA #255 ; DURATION (1 JIFFY)
|
||
1F6A A0AE LDY #$AE ; FULL VOLUME, NO DISTORTION
|
||
|
||
1F6C ; FALL THROUGH ...
|
||
|
||
1F6C 8E00D2 NOISE: STX AUDF1
|
||
1F6F 8C01D2 STY AUDC1
|
||
1F72 8514 STA RTCLOK ; START TIMER
|
||
|
||
1F74 A514 S1L: LDA RTCLOK
|
||
1F76 D0FC BNE S1L
|
||
1F78 8D01D2 STA AUDC1 ; STOP SOUND
|
||
1F7B 60 RTS
|
||
|
||
1F7C ; ----------------
|
||
1F7C ; SOUND #3: "TING"
|
||
1F7C ; ----------------
|
||
|
||
1F7C A90A SND3: LDA #10 ; FREQUENCY
|
||
1F7E 8D00D2 STA AUDF1
|
||
1F81 A9AE LDA #$AE ; FULL, PURE TONE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 110
|
||
GAME-DEPENDENT SOUND LIBRARY (ATARI FOOBLITSKY)
|
||
|
||
1F83 8D01D2 STA AUDC1
|
||
|
||
1F86 A9FB LDA #251 ; 5-JIFFY SUSTAIN
|
||
1F88 8514 STA RTCLOK
|
||
1F8A A514 S3L1: LDA RTCLOK
|
||
1F8C D0FC BNE S3L1
|
||
|
||
1F8E ; DECAY TO ZERO VOLUME
|
||
|
||
1F8E A20E LDX #$0E ; VOLUME INDEX
|
||
1F90 8A S3L2: TXA
|
||
1F91 09A0 ORA #$A0 ; SUPERIMPOSE DISTORTION (PURE)
|
||
1F93 8D01D2 STA AUDC1
|
||
|
||
1F96 A9FC LDA #252 ; WAIT 4 JIFFIES ON EACH LEVEL
|
||
1F98 8514 STA RTCLOK
|
||
1F9A A514 S3L3: LDA RTCLOK
|
||
1F9C D0FC BNE S3L3
|
||
|
||
1F9E CA DEX
|
||
1F9F CA DEX ; LOOP BACK TILL
|
||
1FA0 D0EE BNE S3L2 ; NO MORE VOLUME
|
||
1FA2 8E01D2 STX AUDC1 ; STOP TONE
|
||
1FA5 60 RTS
|
||
|
||
1FA6 ; ----------------
|
||
1FA6 ; SOUND #4: "RAZZ"
|
||
1FA6 ; ----------------
|
||
|
||
1FA6 A964 SND4: LDA #100 ; FREQUENCY
|
||
1FA8 8D00D2 STA AUDF1
|
||
1FAB A92E LDA #$2E ; LOUD, DISTORTED TONE
|
||
1FAD 8D01D2 STA AUDC1
|
||
|
||
1FB0 A9FB LDA #251 ; 5-JIFFY SUSTAIN
|
||
1FB2 8514 STA RTCLOK
|
||
1FB4 A514 S4L1: LDA RTCLOK
|
||
1FB6 D0FC BNE S4L1
|
||
|
||
1FB8 ; DECAY TO ZERO VOLUME
|
||
|
||
1FB8 A20E LDX #$0E ; VOLUME INDEX
|
||
1FBA 8A S4L2: TXA
|
||
1FBB 0920 ORA #$20 ; SUPERIMPOSE DISTORTION
|
||
1FBD 8D01D2 STA AUDC1
|
||
|
||
1FC0 A9FC LDA #252 ; WAIT 4 JIFFIES ON EACH LEVEL
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 111
|
||
GAME-DEPENDENT SOUND LIBRARY (ATARI FOOBLITSKY)
|
||
|
||
1FC2 8514 STA RTCLOK
|
||
1FC4 A514 S4L3: LDA RTCLOK
|
||
1FC6 D0FC BNE S4L3
|
||
|
||
1FC8 CA DEX
|
||
1FC9 CA DEX ; LOOP BACK TILL
|
||
1FCA D0EE BNE S4L2 ; NO MORE VOLUME
|
||
1FCC 8E01D2 STX AUDC1 ; STOP TONE
|
||
1FCF 60 RTS
|
||
|
||
END
|
||
INCLUD SAVE.ASM ; M
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 112
|
||
--- SAVE/RESTORE ---
|
||
|
||
|
||
1FD0 ; --------
|
||
1FD0 ; GRESTORE
|
||
1FD0 ; --------
|
||
|
||
1FD0 20C821 GREST: JSR SRINIT ; INIT SCREEN, GET CR
|
||
|
||
1FD3 A900 LDA #0
|
||
1FD5 8583 STA GPCFLG ; INVALIDATE [GPC]
|
||
1FD7 8589 STA VPCFLG ; AND [VPC]
|
||
|
||
1FD9 A936 LDA #54
|
||
1FDB 85F5 STA CURSOR ; CENTER TEXT
|
||
1FDD A292 LDX #LOW RSTG
|
||
1FDF A921 LDA #HIGH RSTG
|
||
1FE1 A00E LDY #RSTGL
|
||
1FE3 20E51C JSR PRINT ; "RESTORING ..."
|
||
|
||
1FE6 200721 JSR READ ; READ 1ST BLOCK INTO [BUFFER]
|
||
1FE9 B07F BCS BADRD ; SCRAM IF ERROR
|
||
|
||
1FEB AD0004 LDA BUFFER ; CHECK MSB
|
||
1FEE CD0223 CMP GBEGIN+GID ; OF GAME ID
|
||
1FF1 D077 BNE BADRD ; SCRAM IF NO MATCH
|
||
1FF3 AD0104 LDA BUFFER+1 ; SAME FOR LSB
|
||
1FF6 CD0323 CMP GBEGIN+GID+1
|
||
1FF9 D06F BNE BADRD
|
||
|
||
1FFB AD0704 LDA BUFFER+7 ; ALSO COMPARE SIZE SAVED
|
||
1FFE C596 CMP PAGE0 ; TO CURRENT SIZE
|
||
2000 D068 BNE BADRD ; EXIT IF BAD
|
||
|
||
2002 AD0204 RST0: LDA BUFFER+2
|
||
2005 858E STA GSP ; RESTORE [GSP]
|
||
2007 AD0304 LDA BUFFER+3
|
||
200A 858F STA OLDGSP ; [OLDGSP]
|
||
200C AD0404 LDA BUFFER+4
|
||
200F 8580 STA GPCL ; [GPCL]
|
||
2011 AD0504 LDA BUFFER+5
|
||
2014 8581 STA GPCH ; [GPCH]
|
||
2016 AD0504 LDA BUFFER+5
|
||
2019 8581 STA GPCH ; [GPCH]
|
||
201B AD0604 LDA BUFFER+6
|
||
201E 8582 STA GPC0 ; [GPC0]
|
||
|
||
2020 A200 LDX #0
|
||
2022 8683 STX GPCFLG ; INVALIDATE [GPC]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 113
|
||
--- SAVE/RESTORE ---
|
||
|
||
2024 8689 STX VPCFLG ; AND [VPC]
|
||
2026 E8 INX ; = 1
|
||
2027 8698 STX STAMP ; RESET TIMESTAMP (?)
|
||
|
||
2029 A24F LDX #79 ; RESTORE [LOCALS], [CARGS], [CTYPES]
|
||
202B BD0804 RST1: LDA BUFFER+8,X
|
||
202E 9D800A STA LOCALS,X
|
||
2031 CA DEX
|
||
2032 10F7 BPL RST1
|
||
|
||
2034 200721 JSR READ ; RESTORE [GSTAKL]
|
||
2037 B031 BCS BADRD
|
||
2039 200721 JSR READ ; AND [GSTAKH]
|
||
203C B02C BCS BADRD
|
||
|
||
203E A900 LDA #LOW GBEGIN ; POINT [DBUFLO/HI]
|
||
2040 8D0403 STA DBUFLO ; TO PRELOAD
|
||
2043 A923 LDA #HIGH GBEGIN
|
||
2045 8D0503 STA DBUFHI
|
||
|
||
2048 200721 RST2: JSR READ ; READ A BLOCK
|
||
204B B01D BCS BADRD ; EXIT IF ERROR
|
||
204D AD0503 LDA DBUFHI ; END OF PRELOAD YET?
|
||
2050 C596 CMP PAGE0
|
||
2052 D0F4 BNE RST2 ; NO, KEEP READING
|
||
|
||
2054 209B1C JSR NEWLIN ; CLEAR STATUS LINE
|
||
2057 A90E LDA #14
|
||
2059 85F5 STA CURSOR ; CENTER TEXT
|
||
205B A2BA LDX #LOW GRD
|
||
205D A921 LDA #HIGH GRD
|
||
205F A00E LDY #GRDL
|
||
2061 20E51C JSR PRINT ; "GAME RESTORED"
|
||
|
||
2064 200222 JSR GETGD ; "INSERT GAME DISK, PRESS START"
|
||
2067 4CAE0F JMP PREDS ; SUCCEEDS
|
||
|
||
206A 4CED20 BADRD: JMP SRERR ; ELSE FAILS
|
||
|
||
206D ; -----
|
||
206D ; GSAVE
|
||
206D ; -----
|
||
|
||
206D 20C821 GSAVE: JSR SRINIT ; INIT SCREEN, GET CR
|
||
|
||
2070 A935 LDA #53
|
||
2072 85F5 STA CURSOR ; CENTER TEXT
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 114
|
||
--- SAVE/RESTORE ---
|
||
|
||
2074 A282 LDX #LOW SVG
|
||
2076 A921 LDA #HIGH SVG
|
||
2078 A010 LDY #SVGL
|
||
207A 20E51C JSR PRINT ; "SAVING GAME ..."
|
||
|
||
207D AD0223 LDA GBEGIN+GID ; SAVE 1ST
|
||
2080 8D0004 STA BUFFER ; AND
|
||
2083 AD0323 LDA GBEGIN+GID+1 ; 2ND BYTES OF
|
||
2086 8D0104 STA BUFFER+1 ; GAME ID WORD
|
||
|
||
2089 A58E LDA GSP
|
||
208B 8D0204 STA BUFFER+2 ; SAVE [GSP]
|
||
208E A58F LDA OLDGSP
|
||
2090 8D0304 STA BUFFER+3 ; SAVE [OLDGSP]
|
||
|
||
2093 A580 LDA GPCL ; SAVE [GPC]
|
||
2095 8D0404 STA BUFFER+4
|
||
2098 A581 LDA GPCH
|
||
209A 8D0504 STA BUFFER+5
|
||
209D A582 LDA GPC0
|
||
209F 8D0604 STA BUFFER+6
|
||
|
||
20A2 A596 LDA PAGE0 ; SAVE SIZE OF PRELOADS
|
||
20A4 8D0704 STA BUFFER+7
|
||
|
||
20A7 A24F LDX #79 ; SAVE [LOCALS], [CARGS] & [CTYPES]
|
||
20A9 BD800A SV0: LDA LOCALS,X
|
||
20AC 9D0804 STA BUFFER+8,X
|
||
20AF CA DEX
|
||
20B0 10F7 BPL SV0
|
||
|
||
20B2 200321 JSR WRITE ; WRITE [BUFFER] BLOCK
|
||
20B5 B036 BCS SRERR
|
||
20B7 200321 JSR WRITE ; WRITE [GSTAKL]
|
||
20BA B031 BCS SRERR
|
||
20BC 200321 JSR WRITE ; WRITE [GSTAKH]
|
||
20BF B02C BCS SRERR
|
||
|
||
20C1 A900 LDA #LOW GBEGIN ; POINT TO START OF PRELOADS
|
||
20C3 8D0403 STA DBUFLO
|
||
20C6 A923 LDA #HIGH GBEGIN
|
||
20C8 8D0503 STA DBUFHI
|
||
|
||
20CB 200321 SV1: JSR WRITE ; WRITE BLOCK
|
||
20CE B01D BCS SRERR ; SCRAM IF ERROR
|
||
20D0 AD0503 LDA DBUFHI ; WRITTEN ALL OF
|
||
20D3 C596 CMP PAGE0 ; PRELOAD(S)?
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 115
|
||
--- SAVE/RESTORE ---
|
||
|
||
20D5 D0F4 BNE SV1 ; NO, WRITE SOME MORE
|
||
|
||
20D7 209B1C JSR NEWLIN ; CLEAR STATUS LINE
|
||
20DA A90E LDA #14
|
||
20DC 85F5 STA CURSOR ; CENTER TEXT
|
||
20DE A2AC LDX #LOW SCOM
|
||
20E0 A921 LDA #HIGH SCOM
|
||
20E2 A00E LDY #SCOML
|
||
20E4 20E51C JSR PRINT ; "SAVE COMPLETE"
|
||
|
||
20E7 200222 JSR GETGD ; "INSERT GAME DISK"
|
||
20EA 4CAE0F JMP PREDS ; PREDICATE SUCCEEDS
|
||
|
||
20ED ; ------------------
|
||
20ED ; SAVE/RESTORE ERROR
|
||
20ED ; ------------------
|
||
|
||
20ED 209B1C SRERR: JSR NEWLIN ; CLEAR STATUS LINE
|
||
|
||
20F0 A90F LDA #15
|
||
20F2 85F5 STA CURSOR ; CENTER TEXT
|
||
|
||
20F4 A2A0 LDX #LOW DXX
|
||
20F6 A921 LDA #HIGH DXX
|
||
20F8 A00C LDY #DXXL
|
||
20FA 20E51C JSR PRINT ; "DISK ERROR!"
|
||
|
||
20FD 200222 JSR GETGD ; "INSERT GAME DISK, PRESS START"
|
||
2100 4CA20F JMP PREDF ; PREDICATE FAILED
|
||
|
||
2103 ; -------------------
|
||
2103 ; WRITE BLOCK TO DISK
|
||
2103 ; -------------------
|
||
|
||
2103 A957 WRITE: LDA #$57 ; SIO "WRITE" COMMAND
|
||
2105 D002 BNE DDISK
|
||
|
||
2107 ; --------------------
|
||
2107 ; READ BLOCK FROM DISK
|
||
2107 ; --------------------
|
||
|
||
2107 A952 READ: LDA #$52 ; SIO "READ" COMMAND
|
||
|
||
2109 8D0203 DDISK: STA DCOMND ; SET READ/WRITE MODE
|
||
|
||
210C A901 LDA #1 ; ALWAYS USE
|
||
210E 8D0103 STA DUNIT ; DRIVE #1
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 116
|
||
--- SAVE/RESTORE ---
|
||
|
||
|
||
2111 2053E4 JSR DSKINV ; ACCESS 1ST HALF
|
||
2114 AD0303 LDA DSTATS
|
||
2117 3010 BMI BADISK ; EXIT IF ERROR
|
||
|
||
2119 202B21 JSR NEXTSC ; SET UP NEXT ACCESS
|
||
|
||
211C 2053E4 JSR DSKINV ; ACCESS 2ND HALF
|
||
211F AD0303 LDA DSTATS
|
||
2122 3005 BMI BADISK ; EXIT IF ERROR
|
||
|
||
2124 202B21 JSR NEXTSC ; SET UP NEXT ACCESS
|
||
2127 18 CLC ; CARRY CLEAR = OKAY
|
||
2128 60 RTS
|
||
|
||
2129 38 BADISK: SEC ; CARRY SET = BAD I/O
|
||
212A 60 RTS
|
||
|
||
212B ; ---------------------------
|
||
212B ; POINT TO NEXT SECTOR/BUFFER
|
||
212B ; ---------------------------
|
||
|
||
212B EE0A03 NEXTSC: INC DAUX1 ; LSB OF SECTOR ID
|
||
212E D003 BNE NXC
|
||
2130 EE0B03 INC DAUX2 ; MSB
|
||
|
||
2133 AD0403 NXC: LDA DBUFLO ; POINT TO 2ND HALF
|
||
2136 D8 CLD ; OF BUFFER
|
||
2137 18 CLC
|
||
2138 6980 ADC #$80
|
||
213A 8D0403 STA DBUFLO
|
||
213D AD0503 LDA DBUFHI
|
||
2140 6900 ADC #0
|
||
2142 8D0503 STA DBUFHI
|
||
2145 60 RTS
|
||
|
||
2146 ; --------------------
|
||
2146 ; SAVE & RESTORE TEXT
|
||
2146 ; IN ATARI SCREEN CODE
|
||
2146 ; --------------------
|
||
|
||
2146 ; INSERT SAVE DISK, PRESS START
|
||
|
||
2146 296E7365 SAVEM: DB 41,110,115,101,114,116,0
|
||
214D 33213625 DB 51,33,54,37,0
|
||
2152 6469736B DB 100,105,115,107,12,0
|
||
2158 70726573 DB 112,114,101,115,115,0
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 117
|
||
--- SAVE/RESTORE ---
|
||
|
||
215E B3B4A1B2 DB 179,180,161,178,180,0
|
||
001E SAVEML EQU $-SAVEM
|
||
|
||
2164 ; INSERT GAME DISK, PRESS START
|
||
|
||
2164 296E7365 RESTM: DB 41,110,115,101,114,116,0
|
||
216B 27212D25 DB 39,33,45,37,0
|
||
2170 6469736B DB 100,105,115,107,12,0
|
||
2176 70726573 DB 112,114,101,115,115,0
|
||
217C B3B4A1B2 DB 179,180,161,178,180,0
|
||
001E RESTML EQU $-RESTM
|
||
|
||
2182 ; SAVING GAME ...
|
||
|
||
2182 33617669 SVG: DB 51,97,118,105,110,103,0
|
||
2189 67616D65 DB 103,97,109,101,0,14,14,14,0
|
||
0010 SVGL EQU $-SVG
|
||
|
||
2192 ; RESTORING ...
|
||
|
||
2192 32657374 RSTG: DB 50,101,115,116,111,114,105,110,103,0,14,14,14,0
|
||
000E RSTGL EQU $-RSTG
|
||
|
||
21A0 ; DISK ERROR!
|
||
|
||
21A0 2429332B DXX: DB 36,41,51,43,0,37,50,50,47,50,1,0
|
||
000C DXXL EQU $-DXX
|
||
|
||
21AC ; SAVE COMPLETE
|
||
|
||
21AC 33213625 SCOM: DB 51,33,54,37,0,35,47,45,48,44,37,52,37,0
|
||
000E SCOML EQU $-SCOM
|
||
|
||
21BA ; GAME RESTORED
|
||
|
||
21BA 27212D25 GRD: DB 39,33,45,37,0,50,37,51,52,47,50,37,36,0
|
||
000E GRDL EQU $-GRD
|
||
|
||
21C8 ; ------------------------
|
||
21C8 ; INIT SAVE/RESTORE SCREEN
|
||
21C8 ; ------------------------
|
||
|
||
21C8 20A61C SRINIT: JSR STATUS ; SET UP STATUS LINE
|
||
|
||
21CB A903 LDA #3
|
||
21CD 8541 STA SOUNDR ; ENABLE NOISY I/O
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 118
|
||
--- SAVE/RESTORE ---
|
||
|
||
21CF A906 LDA #6
|
||
21D1 85F5 STA CURSOR ; CENTER TEXT
|
||
|
||
21D3 A246 LDX #LOW SAVEM
|
||
21D5 A921 LDA #HIGH SAVEM
|
||
21D7 A01E LDY #SAVEML
|
||
21D9 20E51C JSR PRINT ; "INSERT SAVE DISK ..."
|
||
|
||
21DC A901 LDA #1 ; POINT [DAUX1/2] TO SECTOR 1
|
||
21DE 8D0A03 STA DAUX1
|
||
21E1 A900 LDA #0
|
||
21E3 8D0B03 STA DAUX2
|
||
|
||
21E6 A900 LDA #LOW BUFFER ; AND TO [BUFFER]
|
||
21E8 8D0403 STA DBUFLO
|
||
21EB A904 LDA #HIGH BUFFER
|
||
21ED 8D0503 STA DBUFHI
|
||
|
||
21F0 ; FALL THROUGH ...
|
||
|
||
21F0 ; -----------------
|
||
21F0 ; WAIT FOR "START"
|
||
21F0 ; -----------------
|
||
|
||
21F0 207C1F GETST: JSR SND3 ; "TING"
|
||
|
||
21F3 AD1FD0 GST0: LDA CONSOL
|
||
21F6 C906 CMP #6
|
||
21F8 D0F9 BNE GST0
|
||
21FA AD1FD0 GST1: LDA CONSOL
|
||
21FD C907 CMP #7
|
||
21FF D0F9 BNE GST1
|
||
2201 60 RTS
|
||
|
||
2202 ; --------------------
|
||
2202 ; PROMPT FOR GAME DISK
|
||
2202 ; --------------------
|
||
|
||
2202 A92E GETGD: LDA #46
|
||
2204 85F5 STA CURSOR ; CENTER LINE
|
||
|
||
2206 A264 LDX #LOW RESTM
|
||
2208 A921 LDA #HIGH RESTM
|
||
220A A01E LDY #RESTML
|
||
220C 20E51C JSR PRINT ; "INSERT GAME DISK ..."
|
||
|
||
220F 20F021 JSR GETST ; GET START KEY
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 119
|
||
--- SAVE/RESTORE ---
|
||
|
||
|
||
2212 A21F LDX #LOW DL2 ; SWITCH BACK TO
|
||
2214 A90B LDA #HIGH DL2 ; FULL-SCREEN DLIST
|
||
2216 8EE90B STX DLTOP+LO
|
||
2219 8DEA0B STA DLTOP+HI
|
||
221C 8E3002 STX SDLSTL+LO
|
||
221F 8D3102 STA SDLSTL+HI
|
||
|
||
2222 A900 LDA #0
|
||
2224 8541 STA SOUNDR ; DISABLE NOISY I/O
|
||
2226 60 RTS
|
||
|
||
END
|
||
INCLUD GROS.ASM ; M
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 120
|
||
--- GRIP OPERATING SYSTEM: ATARI ---
|
||
|
||
|
||
0037 GAME EQU 3*18+1 ; 1ST G-CODE BLOCK (55; TRACK 3, SECTOR 1)
|
||
00FD IMAGE EQU 14*18+1 ; 1ST I-FILE BLOCK (253; TRACK 14, SECTOR 1)
|
||
0480 BUFTOP EQU BUFFER+$80 ; TOP HALF OF [BUFFER]
|
||
|
||
2227 ;--------------------------------------------------
|
||
2227 ; FETCH VIRTUAL PAGE [DBLOCK] AND PUT AT RAM PAGES
|
||
2227 ; [DBUFF],[DBUFF]+1.
|
||
2227 ; ON EXIT POINT [DBLOCK] AT NEXT V-PAGE AND POINT
|
||
2227 ; [DBUFF] TO NEXT RAM PAGE
|
||
2227 ;--------------------------------------------------
|
||
|
||
2227 ; ----------------
|
||
2227 ; GET A DISK BLOCK
|
||
2227 ; ----------------
|
||
|
||
2227 A200 GETDSK: LDX #0
|
||
2229 86EC STX DBTOP ; CLEAR MSB OF BLOCK INDEX
|
||
222B E8 INX ; = 1
|
||
222C 8E0103 STX DUNIT ; ALWAYS USE DRIVE #1
|
||
222F 86F1 STX DCNT ; COUNTER FOR LOOP TO GET (2) 256 BYTE PAGES
|
||
|
||
|
||
2231 A952 LDA #$52 ; SIO "READ" COMMAND
|
||
2233 8D0203 STA DCOMND
|
||
|
||
2236 ; CALC WHICH DISK SECTORS TO GET
|
||
|
||
2236 A5EB LDA DBLOCK ; GET THE VIRTUAL PAGE INDEX
|
||
2238 C594 CMP ISTART ; IT IS BELOW THE IMAGE FILE?
|
||
223A 9013 BCC GETGAM ; IF SO, IT'S IN THE GAME FILE
|
||
|
||
223C ; GET BLOCK [A] FROM THE IMAGE FILE
|
||
|
||
223C E594 SBC ISTART ; ZERO-ALIGN THE BLOCK INDEX
|
||
223E 0A ASL A ; * 2 FOR ATARI 128-BYTE SECTORS
|
||
223F 26EC ROL DBTOP ; BUILD MSB
|
||
|
||
2241 ; ENTRY POINT FOR VERIFY
|
||
|
||
2241 0A GETIMG: ASL A ; * 2 AGAIN FOR 512 BYTE PAGES
|
||
2242 26EC ROL DBTOP
|
||
2244 18 CLC
|
||
2245 69FD ADC #LOW IMAGE ; ADD THE PHYSICAL I-FILE OFFSET
|
||
2247 AA TAX ; SAVE LSB HERE
|
||
|
||
2248 A5EC LDA DBTOP ; DO MSB
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 121
|
||
--- GRIP OPERATING SYSTEM: ATARI ---
|
||
|
||
224A 6900 ADC #HIGH IMAGE
|
||
224C 4C5B22 JMP DODSK
|
||
|
||
224F ; GET BLOCK [A] FROM THE GAME FILE
|
||
|
||
224F 0A GETGAM: ASL A ; * 2 FOR 128-BYTE SECTORS
|
||
2250 26EC ROL DBTOP
|
||
|
||
2252 ; ENTRY POINT FOR VERIFY
|
||
|
||
2252 0A GETGME: ASL A ; * 2 AGAIN FOR 512 BYTE PAGES
|
||
2253 18 CLC
|
||
2254 6937 ADC #LOW GAME ; ADD THE PHYSICAL G-FILE OFFSET
|
||
2256 AA TAX ; SAVE LSB HERE
|
||
|
||
2257 A5EC LDA DBTOP ; TAKE CARE OF MSB
|
||
2259 6900 ADC #HIGH GAME
|
||
|
||
225B ; VALIDATE SECTOR ADDRESS IN [X/A] (LSB/MSB)
|
||
225B ; MUST BE NO HIGHER THAN 717 ($02CD)
|
||
|
||
225B C902 DODSK: CMP #$02 ; MSB OUT OF RANGE?
|
||
225D 900B BCC ROK ; OK IF MSB < 2
|
||
225F F005 BEQ T717 ; CHECK LSB IF MSB = 2
|
||
|
||
2261 ; *** ERROR #10: DISK ADDRESS RANGE ***
|
||
|
||
2261 A90A RANGE: LDA #10
|
||
2263 4C5F1C JMP GERROR
|
||
|
||
2266 E0CE T717: CPX #$CE ; MSB WAS 2; IS LSB > $CD?
|
||
2268 B0F7 BCS RANGE ; RANGE ERROR IF SO
|
||
|
||
226A 86EF ROK: STX SECTOR+LO
|
||
226C 85F0 STA SECTOR+HI
|
||
|
||
226E A5EF DSKLP1: LDA SECTOR+LO
|
||
2270 8D0A03 STA DAUX1 ; LSB OF SECTOR ADDRESS
|
||
2273 A5F0 LDA SECTOR+HI
|
||
2275 8D0B03 STA DAUX2 ; MSB OF SECTOR ADDRESS
|
||
|
||
2278 A900 LDA #LOW BUFFER
|
||
227A 8D0403 STA DBUFLO
|
||
227D A904 LDA #HIGH BUFFER
|
||
227F 8D0503 STA DBUFHI
|
||
|
||
2282 ; FETCH DISK BLOCK INTO [BUFFER]
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 122
|
||
--- GRIP OPERATING SYSTEM: ATARI ---
|
||
|
||
|
||
2282 2053E4 JSR DSKINV ; GET 1ST HALF OF BLOCK
|
||
2285 AD0303 LDA DSTATS ; IF STATUS IS NEGATIVE,
|
||
2288 3040 BMI DERR ; SOMETHING WENT WRONG
|
||
|
||
228A A980 LDA #LOW BUFTOP ; POINT TO
|
||
228C 8D0403 STA DBUFLO ; TOP HALF-PAGE
|
||
228F A904 LDA #HIGH BUFTOP ; OF [BUFFER]
|
||
2291 8D0503 STA DBUFHI
|
||
|
||
2294 E6EF INC SECTOR+LO ; ALSO POINT
|
||
2296 D002 BNE DODSK1 ; TO THE
|
||
2298 E6F0 INC SECTOR+HI ; NEXT SECTOR
|
||
|
||
229A A5EF DODSK1: LDA SECTOR+LO
|
||
229C 8D0A03 STA DAUX1
|
||
229F A5F0 LDA SECTOR+HI
|
||
22A1 8D0B03 STA DAUX2
|
||
|
||
22A4 2053E4 JSR DSKINV ; GET 2ND HALF OF BLOCK
|
||
22A7 AD0303 LDA DSTATS ; ERROR IF
|
||
22AA 301E BMI DERR ; [DSTATS] RETURNED NEGATIVE
|
||
|
||
22AC ; MOVE [BUFFER] TO PAGE [DBUFF]
|
||
|
||
22AC A000 LDY #0
|
||
22AE 84ED STY DBUFF+LO ; MAKE SURE LSB IS ZEROED!
|
||
22B0 B90004 MOVEB: LDA BUFFER,Y
|
||
22B3 91ED STA (DBUFF),Y
|
||
22B5 C8 INY
|
||
22B6 D0F8 BNE MOVEB
|
||
|
||
22B8 E6EE INC DBUFF+HI ; POINT TO NEXT RAM PAGE
|
||
22BA C6F1 DEC DCNT
|
||
22BC 3009 BMI DSKP1
|
||
|
||
22BE E6EF INC SECTOR+LO
|
||
22C0 D002 BNE DSKP0
|
||
22C2 E6F0 INC SECTOR+HI
|
||
22C4 4C6E22 DSKP0: JMP DSKLP1
|
||
|
||
|
||
22C7 E6EB DSKP1: INC DBLOCK ; POINT TO NEXT VIRTUAL PAGE
|
||
22C9 60 RTS
|
||
|
||
22CA ; *** ERROR #11: DISK ACCESS ***
|
||
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE -- MACHINE DEPENDENT PAGE 123
|
||
--- GRIP OPERATING SYSTEM: ATARI ---
|
||
|
||
22CA A90B DERR: LDA #11
|
||
22CC 4C5F1C JMP GERROR
|
||
|
||
END
|
||
|
||
22CF IF DEBUG
|
||
22CF INCLUD BUGGER.ASM
|
||
22CF ENDIF
|
||
|
||
0000 END
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- SYMBOL TABLE PAGE 124
|
||
---- SYMBOL TABLE ----
|
||
|
||
142B BSADR 00D0 DECVAL 1006 DSKP1 22C7 GBITSP 1227
|
||
0CF8 BSET 00CF DEL1 1D16 DSTATS 0303 GBL1 198D
|
||
0CF8 BSIZE 00D2 DELAY 1D12 DUMMY 0B0E GBL2 1996
|
||
142B BTAB 009E DERR 22CA DUMP 1DD2 GBL3 19AA
|
||
A12VAL 1012 BUFFER 0400 DIVERR 11F4 DUMP0 1DDA GBL4 19AE
|
||
A2VAL 128F BUFTOP 0480 DIVEX 11B4 DUNIT 0301 GBLL 19F4
|
||
ABQUOT 11B5 CALCB 12DC DIVIDE 1177 DVX 1011 GBLLL 1A06
|
||
ABREM 11A7 CALCW 12E5 DL1 0B15 DXX 21A0 GBLX 19BF
|
||
ABSDIV 118C CALL1 13A9 DL2 0B1F DXXL 000C GBNOT 10D1
|
||
ABYTE 0075 CALL2 13CC DL2A 0B34 EAR0 1BDE GBXOR 121B
|
||
ADDGPC 18D9 CALL3 13D2 DLS0 126E EAR1 1BE8 GCALC 0D06
|
||
ADDIA1 192F CALL4 13E4 DLTOP 0BE9 EAR20 1C05 GCALL 12F7
|
||
ADDIA2 1906 CARGS 0AA0 DMACTL D400 EAR21 1C12 GCHECK 0014
|
||
ADDVPC 18AA CH 02FC DMPMSK 1DF5 EAR22 1C04 GCL 12FB
|
||
ADEX 0076 CHAR 1CDD DMSK0 1DFD EAR23 1BF6 GCL0 1307
|
||
ADEX2 0077 CHKSUM 00F6 DOB2 0FCF EAR24 1C17 GCL1 130F
|
||
ADIS2 1913 CIOV E456 DOCALL 137A EAR25 1C1B GCL2 1315
|
||
ADISK 193C CIX 00F2 DODIS 0E4D EARLY 1BD6 GCL3 132E
|
||
AGISK 18E6 CLPRI2 15F7 DODSK 225B EARLY2 1BEF GCL4 133D
|
||
ARG1 006D CLPRIA 165D DODSK1 229A EMPTY 1D09 GCL5 1350
|
||
ARG2 006F CLRT 0C6B DOFIT 1A92 ENDM 1C51 GCL6 135A
|
||
ARG3 0071 CLRZ 0C65 DOGET 12CB ENDML 000E GCL7 135D
|
||
ARG4 0073 COLCRS 0055 DOMASK 1610 ENOUGH 0CF2 GCL8 136F
|
||
ATASCI 1D92 COLD 0BEB DOPUT 10C0 EQP1 1247 GCLEAR 1C1F
|
||
ATRACT 004D COLDST 0244 DORAND 1D0A EQP2 1253 GCLS 1C35
|
||
AUDC1 D201 COLDSV E477 DOSINI 000C ERRM 1C40 GCLSN 1C33
|
||
AUDC2 D203 COLOR1 02C5 DOSVEC 000A ERRML 0011 GCODE 0090
|
||
AUDC3 D205 COLOR2 02C6 DOXOP 0E3E FADD DA66 GCOPYP 0FAE
|
||
AUDC4 D207 COMPAR 1297 DRAW 15CE FALSE 0000 GDEC 10B8
|
||
AUDCTL D208 CONSOL D01F DRAWE2 1575 FASC D8E6 GDIV 1163
|
||
AUDF1 D200 CRSINH 02F0 DRAWEX 1506 FDIV DB28 GDLESP 126B
|
||
AUDF2 D202 CTYPES 0AC0 DRAWI1 1516 FIT 1A9D GDUMP 14B1
|
||
AUDF3 D204 CURSOR 00F5 DRAWI2 151D FIT0 1AA9 GEND 0004
|
||
AUDF4 D206 DAUX1 030A DRAWI3 1507 FIT2 1AB7 GEQP 1239
|
||
AVISK 18B7 DAUX2 030B DRAWI4 151F FIT3 1ABE GERROR 1C5F
|
||
B2MASK 167E DBLOCK 00EB DRAWI5 1532 FITEX 1AD1 GETBLK 19C0
|
||
B2MLP 1680 DBTOP 00EC DRAWI6 1540 FMOVE DDB6 GETBS 1949
|
||
BADISK 2129 DBUFF 00ED DRAWI7 1549 FMUL DADB GETBYT 1B25
|
||
BADOP1 0E9D DBUFHI 0305 DRAWI8 1585 FPI D9D2 GETDSK 2227
|
||
BADOP2 0EDA DBUFLO 0304 DRAWI9 158C FR0 00D4 GETGAM 224F
|
||
BADRD 206A DC0 0DE0 DRAWIA 1576 FR1 00E0 GETGD 2202
|
||
BADVER 1F53 DC1 0DE7 DRAWIB 158E FSUB DA60 GETGME 2252
|
||
BLKLEN 00EA DC2 0DEE DRAWIC 15A1 GADD 1125 GETI 1A36
|
||
BLOCK 00D3 DCNT 00F1 DRAWID 15B1 GAME 0037 GETIMG 2241
|
||
BLOCKX 1A0F DCOMND 0302 DSKINV E453 GBAND 1203 GETIP 0CFA
|
||
BOOT 0009 DDISK 2109 DSKLP1 226E GBEGIN 2300 GETLEN 0CB2
|
||
BRKKEY 0011 DEBUG 0000 DSKP0 22C4 GBIOR 120F GETLNG 0EEE
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- SYMBOL TABLE PAGE 125
|
||
---- SYMBOL TABLE ----
|
||
|
||
GETSHT 0EEA GRAND 143F HOLD 1C8A ITERS 00BD MUH 00AE
|
||
GETST 21F0 GRD 21BA I 007A ITEXI 186D MUL 00AD
|
||
GETVAR 0F02 GRDL 000E IADR1 00AF ITICN 00BE MULP 19D1
|
||
GETVR1 0F07 GREST 1FD0 IADR10 00B1 ITLOOP 17D4 MULP1 1798
|
||
GETVRG 0F1B GRET 10E3 IADR2 00B2 ITLP2 17CA MULXY 178C
|
||
GETVRL 0F0B GRFALS 108E IADR20 00B4 ITLP3 180D MUSHFT 00AC
|
||
GFSTAK 0F28 GRIP 0B00 IBLKS 0006 ITOBIG 0CED MUSK 19DA
|
||
GGET 12C1 GRSTAK 1092 ICALC 1889 ITPNT 00BF MUSK1 17A1
|
||
GGETB 12D5 GRT1 1085 ICAUX1 034A ITRATE 17AC NARGS 006C
|
||
GGLOB 000A GRT2 1087 ICAUX2 034B ITSKP2 17F1 NBLOKS 00A2
|
||
GGRTRP 1279 GRTRUE 1083 ICBADR 0344 ITSKP3 181A NEGATE 00E9
|
||
GID 0002 GSAVE 206D ICBLEN 0348 ITSKP4 1838 NEWL0 1C9F
|
||
GIGRTP 1284 GSER 000C ICCOM 0342 ITSKP5 185A NEWLIN 1C9B
|
||
GINC 10AD GSET 12B4 ICENT 1419 IVERS 0016 NEWXY 1A89
|
||
GINPUT 1D24 GSETI 1688 ICHECK 0004 IVX 1005 NEXI 1888
|
||
GITER 1461 GSHOWI 14BD ICODE 0091 IX1 00B5 NEXTPC 1AD2
|
||
GITER1 147C GSHOWN 14B7 IEND 0002 IX2 00B6 NEXTSC 212B
|
||
GJUMP 10DD GSOUND 1E25 IFILE 1EC4 IXSKIP 00C6 NIBBLE 1CD7
|
||
GLEN 0012 GSP 008E IFP D9AA IY1 00B7 NICONS 00A3
|
||
GLESSP 1265 GST0 21F3 IHEAD 0CC4 IY2 00B8 NOGRAM 0CAD
|
||
GLG 0EF1 GST1 21FA IICONS 0007 J 007C NOISE 1F6C
|
||
GLOAD 14B4 GSTAKH 0600 ILD0 1A6D K 007E NOIT 1D35
|
||
GLOBAL 009C GSTAKL 0500 ILD1 1A75 KEXIT 1D80 NOMASK 14E4
|
||
GMLOOP 1142 GSTART 0006 ILD2 1A85 LBUFF 0580 NOMSK1 1560
|
||
GMNEXT 1159 GSUB 1132 ILEN 0000 LEN 00F4 NONSNS 1857
|
||
GMOD 116D GSW0 16CA IMAGE 00FD LETGO 1C91 NOPS0 0008
|
||
GMODE 0001 GSW1 16D2 INBUFF 00F3 LINE 00F2 NOPS1 0009
|
||
GMUL 113F GSW2 16E1 INCGPC 18C8 LO 0000 NOPS2 0012
|
||
GNOOP 0FFE GSW3 16E5 INCIA1 1920 LOCALS 0A80 NOPSX 0011
|
||
GO 0E5F GSW4 1708 INCIA2 18F7 LRU 0099 NOUGH 0CF7
|
||
GODIV 1199 GSW5 1713 INCVAL 0FFF LRUMAP 0880 NPC0 1AE7
|
||
GOVER 1C81 GSWAPI 16BC INCVPC 1899 MASK 00DB NPC1 1AEF
|
||
GPC 0080 GTBT0 1B3A INEX1 192E MDXCUT 00C7 NPC1A 1AF7
|
||
GPC0 0082 GTBT1 1B42 INEX2 1905 MEMMAP 0700 NPC2 1AFB
|
||
GPCFLG 0083 GTBT1A 1B4A INTRP 0042 MEMTOP 1CFD NPC3 1B22
|
||
GPCH 0081 GTBT2 1B4E IPURE 0095 MINIT 11F9 NPC4 1B1C
|
||
GPCL 0080 GTBT3 1B75 IRDIN 1F02 MINIT0 0DA3 NXC 2133
|
||
GPEX1 18D8 GTBT4 1B6F IRQEN D20E MINIT1 0DB2 NXTENT 187D
|
||
GPGET 0CB8 GVALUE 10A5 ISETUP 1A10 MLOOP 0DCF OLDGSP 008F
|
||
GPOINT 0084 GVCALC 0F8C ISTART 0094 MOVEB 22B0 OP0 0E64
|
||
GPOP 109F GVERP 1E46 ISU 1A1B MOVED 1D3D OP1 0E73
|
||
GPUR 0008 GVERS 0000 ISUM 1EFE MOVED2 1D40 OP1A 0E7D
|
||
GPURE 0093 GWIND 171C ISUM0 1F32 MSKFLG 00E3 OP1B 0E87
|
||
GPUSH 1098 GZEROP 10C5 ISUM2 1F1A MSTART 0400 OP1EX 0E8E
|
||
GPUT 13F1 HCHARS 1CBE ISUM3 1F29 MTEMP 00A8 OP2 0EA2
|
||
GPUTB 13FC HEX 1CCE ITAB 00A0 MU0 17A9 OP2A 0EAC
|
||
GQUIT 1C7A HI 0001 ITENT 14EB MUEND 19E1 OP2B 0EAF
|
||
|
||
|
||
AVOCET SYSTEMS 6502 CROSS-ASSEMBLER - VERSION 2.01C
|
||
|
||
GRIP/6502 INFOCOM COMPANY PRIVATE --- SYMBOL TABLE PAGE 126
|
||
---- SYMBOL TABLE ----
|
||
|
||
OP2C 0EBE PREDS 0FAE S4L1 1FB4 SV0 20A9 VSUM 1E6A
|
||
OP2D 0EC1 PRERR2 16C5 S4L2 1FBA SV1 20CB VSUM0 1E9E
|
||
OP2EX 0ECB PRINT 1CE5 S4L3 1FC4 SVG 2182 VSUM2 1E86
|
||
OPCODE 006B PSHVAL 0F3E SAVEM 2146 SVGL 0010 VSUM3 1E95
|
||
OPEXT 0DF5 PSHXA 0F42 SAVEML 001E SWAP 009A VSUM4 1EBA
|
||
OPT0 101B PTCALC 0C2B SAVEY 1BEE T717 2266 WARM 0C61
|
||
OPT1 102B PURERR 143A SAVMSC 0058 TARGET 009B WCEX 0FA1
|
||
OPT2 103D PUTBYT 0F60 SCEX 12B3 TEXT 03A0 WILP 171E
|
||
OPTX 1061 PUTLSB 1404 SCMP 12A9 TICK 1D43 WINDH 00CD
|
||
OPX1 0E06 PUTVAL 0F66 SCOM 21AC TICK1 1D4E WINDW 00CE
|
||
OPX2 0E10 PUTVLG 0F7F SCOML 000E TOADR 1DEE WINDX1 00C9
|
||
OPX3 0E1A PUTVLL 0F6F SCOMP 129E TOADR2 1E14 WINDX2 00CB
|
||
OPX4 0E35 PUTVR1 0F6B SCREEN A100 TOADR3 1E1D WINDY1 00CA
|
||
OPXNXT 0E21 PYES 10CE SDLSTL 0230 TOPCUT 00C4 WINDY2 00CC
|
||
OVER 0F50 QSIGN 00AA SDMCTL 022F TOPX 0E00 WISK1 172E
|
||
PAGE 1B78 QUOT 00A4 SECTOR 00EF TOX 00E4 WISK2 172B
|
||
PAGE0 0096 RAMSIZ 02E4 SENSE 1D5D TRUE 00FF WISK3 173E
|
||
PAGMAP 0800 RAMTOP 006A SHOWI 14C1 UDIV 11C3 WISK4 1746
|
||
PATB 0D77 RANDOM D20A SI0 1693 UDLOOP 11CC WISK5 174E
|
||
PATB1 0D84 RANGE 2261 SI1 1697 UDNEXT 11E4 WISK6 1756
|
||
PATI 0D8E READ 2107 SI3 16B3 UNDER 0F39 WISK7 1764
|
||
PATI1 0D9B READIN 1E6E SIDCUT 00C5 UPTIME 1BA0 WISK8 1768
|
||
PBAD 1262 REMAIN 00A6 SIOINV E465 USEGP 1431 WISK9 1776
|
||
PCALC 1409 RESTM 2164 SKCTL D20F UT0 1BB7 WISKA 177A
|
||
PCALC1 140E RESTML 001E SND1 1F5E UT1 1BC2 WRITE 2103
|
||
PCALC2 1430 RET0 0F5E SND2 1F66 UT2 1BCE X1 006D
|
||
PGE1 1B7A RET1 10F2 SND3 1F7C UT3 1BD3 X2 0071
|
||
PGE2 1B89 RET2 1105 SND4 1FA6 V2A1 0EDF XCURS 00E7
|
||
PGOOD 125F RFLIP 11A3 SNDERR 1E41 VALUE 0078 XDEX1 00B9
|
||
PLAY 1E3F ROK 226A SOUNDR 0041 VARGET 0EF9 XDEX2 00BA
|
||
PMAX 0097 ROWCRS 0054 SOUNDS 0004 VARPUT 0F55 XPOS 00C0
|
||
POKMSK 0010 RSIGN 00AB SRERR 20ED VEXIT 111E XPSAV 00E5
|
||
POPVAL 0F28 RST0 2002 SRINIT 21C8 VHIGHS 09C0 Y1 006F
|
||
PORTB D301 RST1 202B STABLE 1F56 VLOWS 0900 Y2 0073
|
||
PR0 1CEF RST2 2048 STAMP 0098 VPC 0086 YCURS 00E8
|
||
PREDB 0FB3 RSTG 2192 STATUS 1CA6 VPC0 0088 YDEX1 00BB
|
||
PREDB1 0FD6 RSTGL 000E STICK 1D83 VPCFLG 0089 YDEX2 00BC
|
||
PREDB2 0FE1 RTCLOK 0014 STICK0 0278 VPCH 0087 YPOS 00C2
|
||
PREDB3 0FE8 S1L 1F74 STICK1 0279 VPCL 0086 ZEND 00FF
|
||
PREDF 0FA2 S3L1 1F8A STIKEX 1D8F VPCSAV 008C ZFR0 DA44
|
||
PREDLB 0FC3 S3L2 1F90 STRIG0 0284 VPEX1 18A9 ZFR1 DA46
|
||
PREDNB 0FA7 S3L3 1F9A STRIG1 0285 VPOINT 008A ZSTART 006B
|
||
|
||
***** NO ERRORS DETECTED *****
|