SPYH21 (1/5/24) text file is listed below - It should assemble cleanly in LSWASM
If you want a VS Code copy or a dsk file - just email me a request
;****************************************************************************************************************************************************
;*
;* Spy Hunter Attempt 21
;* 1/5/2023
;* R.Natili
;* * Oil Spray - Building off of SPYH18
;* * Page Flipping
;* * Joystick Control
;* * Bezel Graphics
;* * Gun Shoot
;* * Updated Course graphics
;*
;* REFS:
;* * "A Great Old-Timey Game-Programming Hack" - Tom Moertel - 12/14/2013 Blog
;* * "Optimizing 6809 Assembly Code: Part 3 - Stack Blasting and Self Modifying Code" - 9/16/2017 - nowhereman999.wordpress.com
;* * "CoCo (6809) Assembly on a modern computer" - 6/19/2017 - nowhereman999.wordpress.com
;* * 6809 Assembly Language Programming - Leventhal - 1981
;* * Assembly Language Graphics for the TRS-80 Color Computer - Don Inman, Kurt Inman with Dymax - 1983
;* * Dragon Machine Language for the Absolute Beginner - Reyden - 1983
;* * "Programming in 6809 Assembly" - Lesson 12 PONG - by Steve Bjork 11/03/2018 and SPACEWAR 2.0 (RPN) variant
;* * CoCo Town - 2023
;* * Assy by George - 2023
;*
;****************************************************************************************************************************************************
; MEMORY MAP
;$0400 - $1BFF Screen number one
;$1C00 - $33FF Screen Number two
;$3800 - $5800 Program Space
;$5801 - $5FFF Stack Space
;$6000 - $77FF Road Sprite Data (+$4400 from Screen #2 @ $1C00)
;CoCo System ports definitions
SAMvregs equ $FFC0 ;SAM's V-mode registers (3-Bits)
SAMvregsBC equ 3 ;Number of bits for V-mode
SAMpmode4 equ %110 ;Graphics Pmode4 for setting the V1,V2 & V3
SAMmemLoc equ $FFC6 ;Sam's Video Address registers (7-Bits)
SAMmemLocBC equ 7 ;Number of bits for V-address
VDGPort equ $FF22 ;I/O port for control bits for VDG
Pmode4VDG equ %11111000 ;upper 5 bits sets the VDG, This is pmode 4
ScreenMemory equ $400 ;start of screen memory
ScreenSize equ 6144 ;size of screen in memory $1800
KEYIN EQU $A000 ;KEYBOARD SCAN ROUTINE - USE FOR ROTATIONS, WILL NOT REPEAT W/ KEY HELD DOWN
POLCAT EQU $A1B1 ;KEYBOARD SCAN
JOYST EQU $A00A :Joystick
StackTop equ $5FFF ;Top end of stack space, grows down
Screen1Loc equ $400 ;The first screen in memory
Screen2Loc equ Screen1Loc+ScreenSize ;Start of second screen in memory
;Constants for Screen Variables
SPRITEOFF EQU $4400 ;Address Offset for Sprite Data (i.e. Screen#2 + $5400)
GSTART EQU $1A79 ;SCREEN ADDRESS FOR SCORE
YMAX1 EQU 96
YMAX3 EQU 192
YMAX4 EQU 192
;VALUES OF SAM FOR MODE 1
SAM3 EQU 6
;VALUES OF PIA FOR MODE 1,3,4
PIA3 EQU $E0
CSET0 EQU 0
CSET1 EQU 8
;VALUES OF LOWBIT FOR MODES 1,3,4
LOWB3 EQU 6 ;NOT NEEDED
LOWB4 EQU 7
; **** Variables ****
;Object definition
;Direct page definitions
; org 0 ;???
;
org $3800 ;put program at the end of first 16K
;
SETDP $80 ;Don't use Direct Page Variables
WorkScreen RMB 2 ;Pointer to Work Screen memory address
TempMem RMB 2
TempC RMB 1
CARX RMB 2 ;Byte Location (0-32) X Location of Spy Car
CARXG RMB 1 ;Current Graphic # (0-5) of Car
CARGRAPH RMB 2 ;Current Car Graphic Address
SHOTGRAPH RMB 2 ;Current Shot Graphic Address
GUNLOC RMB 2 ;Current GUNSHOT address offset amount above SPYCAR
OILLOC RMB 2 ;Current OIL address below SPYCAR
OILLOC2 RMB 2 ;Current OIL#2 address below SPYCAR
OILLOC3 RMB 2
OILLOC4 RMB 2
OILLOC5 RMB 2
OILLOC6 RMB 2
OILLOC7 RMB 2
OILLOC8 RMB 2
OILX RMB 2 ;Current OIL X location
OILX2 RMB 2 ;Current Oil#2 X location
OILX3 RMB 2 ;Current Oil#3 X location
OILX4 RMB 2 ;Current Oil#4 X location
OILX5 RMB 2 ;Current Oil#5 X location
OILX6 RMB 2 ;Current Oil#6 X location
OILX7 RMB 2
OILX8 RMB 2
SHOT RMB 1 ;To Trigger Shot 0=No, 1=Yes
SOIL RMB 1 ;Spray Oil #
OTRIG RMB 1 ;Oil Trigger
SPEED RMB 1 ;Counter for Speed - counts/screen update - more=slower
SPEEDSET RMB 1 ;SPEED Set Point - i.e. current speed
ROADGR RMB 2 ;ROAD GRAPHIC ADDRESS START
ROADGRE RMB 2 ;ROAD GRAPHIC ADDRESS END
COURSEN RMB 2 ;Course Graphic Number from Table
ROADLINE1 RMB 3 ;Road Line #1 (2 Bytes Graphic Address + 1 byte Offset) ?Use Direct Page Addresses??
ROADLINE2 RMB 3
ROADLINE3 RMB 3
ROADLINE4 RMB 3
ROADLINE5 RMB 3
ROADLINE6 RMB 3
ROADLINE7 RMB 3
ROADLINE8 RMB 3
ROADLINE9 RMB 3
ROADLINE10 RMB 3
ROADLINE11 RMB 3
ROADLINE12 RMB 3
ROADLINE13 RMB 3
ROADLINE14 RMB 3
ROADLINE15 RMB 3
ROADLINE16 RMB 3
ROADLINE17 RMB 3
ROADLINE18 RMB 3
ROADLINE19 RMB 3
ROADLINE20 RMB 3
ROADLINE21 RMB 3
ROADLINE22 RMB 3
ROADLINE23 RMB 3
ROADLINE24 RMB 3
BEZELCT RMB 1 ;Counter for Bezel Draw
SCPOINT RMB 1 ;SCREEN Pointer 1=First 2=Second
CARNUM rmb 1 ;Current Car Number (use to alternate car draws)
; **** GRAPHICS Data ****
SWITCHB FCB %00010101,%01010000 ;Total Memory = $241??
FCB %00010101,%01010000
FCB %01100101,%01001100 ;LIGHT+WHEEL
FCB %01100101,%01001100 ;LIGHT+WHEEL
FCB %01110101,%01010100 ;5 WHEEL
FCB %01110101,%01010100 ;WHEEL
FCB %00010101,%01010000
FCB %00010101,%01010000
FCB %00010101,%01010000
FCB %00010101,%01010000 ;10
FCB %00010000,%00010000
FCB %00010000,%00010000
FCB %00010000,%00010000
FCB %01000111,%11000100
FCB %01000111,%11000100 ;15
FCB %01000111,%11000100
FCB %01000111,%11000100
FCB %01011000,%00110100
FCB %01011000,%00110100
FCB %01010111,%11010000 ;20
FCB %00100101,%01001000
FCB %00100101,%01001000 ;22 ($16)
SPYCAR30W FCB %00101111,%11101000,%00000000 ;WIDER car (NOT USED)
FCB %00101111,%11101000,%00000000
FCB %11001111,%11100110,%00000000 ;LIGHT+WHEEL
FCB %11001111,%11100110,%00000000 ;LIGHT+WHEEL
FCB %11101111,%11111110,%00000000 ;5 WHEEL
FCB %11101111,%11111110,%00000000 ;WHEEL
FCB %00101111,%11101000,%00000000
FCB %00101111,%11101000,%00000000
FCB %00101111,%11101000,%00000000
FCB %00101111,%11101000,%00000000 ;10
FCB %00100000,%00001000,%00000000
FCB %00100000,%00001000,%00000000
FCB %00100000,%00001000,%00000000
FCB %10001111,%11100010,%00000000
FCB %10001111,%11100010,%00000000 ;15
FCB %10001111,%11100010,%00000000
FCB %10001111,%11100010,%00000000
FCB %10110000,%00011010,%00000000
FCB %10110000,%00011010,%00000000
FCB %10101111,%11101000,%00000000 ;20
FCB %00101111,%11101000,%00000000
FCB %00001111,%11100000,%00000000 ;22 (or $16) $20x$16=$2C0
SPYCAR30 FCB %00101111,%10100000,%00000000
FCB %00101111,%10100000,%00000000
FCB %11001111,%10011000,%00000000 ;LIGHT+WHEEL
FCB %11001111,%10011000,%00000000 ;LIGHT+WHEEL
FCB %11101111,%11111000,%00000000 ;5 WHEEL
FCB %11101111,%11111000,%00000000 ;WHEEL
FCB %00101111,%10100000,%00000000
FCB %00101111,%10100000,%00000000
FCB %00101111,%10100000,%00000000
FCB %00101111,%10100000,%00000000 ;10
FCB %00100000,%00100000,%00000000
FCB %00100000,%00100000,%00000000
FCB %00100000,%00100000,%00000000
FCB %10001111,%10001000,%00000000
FCB %10001111,%10001000,%00000000 ;15
FCB %10001111,%10001000,%00000000
FCB %10001111,%10001000,%00000000
FCB %10110000,%01101000,%00000000
FCB %10110000,%01101000,%00000000
FCB %10101111,%10100000,%00000000 ;20
FCB %00101111,%10100000,%00000000
FCB %00001111,%10000000,%00000000 ;22 (or $16) $20x$16=$2C0
SPYCAR31 FCB %00001011,%11101000,%00000000
FCB %00001011,%11101000,%00000000
FCB %00110011,%11100110,%00000000 ;LIGHT+WHEEL
FCB %00110011,%11100110,%00000000 ;LIGHT+WHEEL
FCB %00111011,%11111110,%00000000 ;5 WHEEL
FCB %00111011,%11111110,%00000000 ;WHEEL
FCB %00001011,%11101000,%00000000
FCB %00001011,%11101000,%00000000
FCB %00001011,%11101000,%00000000
FCB %00001011,%11101000,%00000000 ;10
FCB %00001000,%00001000,%00000000
FCB %00001000,%00001000,%00000000
FCB %00001000,%00001000,%00000000
FCB %00100011,%11100010,%00000000
FCB %00100011,%11100010,%00000000 ;15
FCB %00100011,%11100010,%00000000
FCB %00100011,%11100010,%00000000
FCB %00101100,%00011010,%00000000
FCB %00101100,%00011010,%00000000
FCB %00101011,%11101000,%00000000 ;20
FCB %00001011,%11101000,%00000000
FCB %00000011,%11100000,%00000000 ;22 (or $16) $20x$16=$2C0
SPYCAR32 FCB %00000010,%11111010,%00000000
FCB %00000010,%11111010,%00000000
FCB %00001100,%11111001,%10000000 ;LIGHT+WHEEL
FCB %00001100,%11111001,%10000000 ;LIGHT+WHEEL
FCB %00001110,%11111111,%10000000 ;5 WHEEL
FCB %00001110,%11111111,%10000000 ;WHEEL
FCB %00000010,%11111010,%00000000
FCB %00000010,%11111010,%00000000
FCB %00000010,%11111010,%00000000
FCB %00000010,%11111010,%00000000 ;10
FCB %00000010,%00000010,%00000000
FCB %00000010,%00000010,%00000000
FCB %00000010,%00000010,%00000000
FCB %00001000,%11111000,%10000000
FCB %00001000,%11111000,%10000000 ;15
FCB %00001000,%11111000,%10000000
FCB %00001000,%11111000,%10000000
FCB %00001011,%00000110,%10000000
FCB %00001011,%00000110,%10000000
FCB %00001010,%11111010,%00000000 ;20
FCB %00000010,%11111010,%00000000
FCB %00000000,%11111000,%00000000 ;22 (or $16) $20x$16=$2C0
SPYCAR33 FCB %00000000,%10111110,%10000000
FCB %00000000,%10111110,%10000000
FCB %00000011,%00111110,%01100000 ;LIGHT+WHEEL
FCB %00000011,%00111110,%01100000 ;LIGHT+WHEEL
FCB %00000011,%10111111,%11100000 ;5 WHEEL
FCB %00000011,%10111111,%11100000 ;WHEEL
FCB %00000000,%10111110,%10000000
FCB %00000000,%10111110,%10000000
FCB %00000000,%10111110,%10000000
FCB %00000000,%10111110,%10000000 ;10
FCB %00000000,%10000000,%10000000
FCB %00000000,%10000000,%10000000
FCB %00000000,%10000000,%10000000
FCB %00000010,%00111110,%00100000
FCB %00000010,%00111110,%00100000 ;15
FCB %00000010,%00111110,%00100000
FCB %00000010,%00111110,%00100000
FCB %00000010,%11000001,%10100000
FCB %00000010,%11000001,%10100000
FCB %00000010,%10111110,%10000000 ;20
FCB %00000000,%10111110,%10000000
FCB %00000000,%00111110,%00000000 ;22 (or $16) $20x$16=$2C0
SPYCAR34 FCB %00000000,%00101111,%10100000
FCB %00000000,%00101111,%10100000
FCB %00000000,%11001111,%10011000 ;LIGHT+WHEEL
FCB %00000000,%11001111,%10011000 ;LIGHT+WHEEL
FCB %00000000,%11101111,%11111000 ;5 WHEEL
FCB %00000000,%11101111,%11111000 ;WHEEL
FCB %00000000,%00101111,%10100000
FCB %00000000,%00101111,%10100000
FCB %00000000,%00101111,%10100000
FCB %00000000,%00101111,%10100000 ;10
FCB %00000000,%00100000,%00100000
FCB %00000000,%00100000,%00100000
FCB %00000000,%00100000,%00100000
FCB %00000000,%10001111,%10001000
FCB %00000000,%10001111,%10001000 ;15
FCB %00000000,%10001111,%10001000
FCB %00000000,%10001111,%10001000
FCB %00000000,%10110000,%01101000
FCB %00000000,%10110000,%01101000
FCB %00000000,%10101111,%10100000 ;20
FCB %00000000,%00101111,%10100000
FCB %00000000,%00001111,%10000000 ;22 (or $16) $20x$16=$2C0
SPYCAR35 FCB %00000000,%00001011,%11101000
FCB %00000000,%00001011,%11101000
FCB %00000000,%00110011,%11100110 ;LIGHT+WHEEL
FCB %00000000,%00110011,%11100110 ;LIGHT+WHEEL
FCB %00000000,%00111011,%11111110 ;5 WHEEL
FCB %00000000,%00111011,%11111110 ;WHEEL
FCB %00000000,%00001011,%11101000
FCB %00000000,%00001011,%11101000
FCB %00000000,%00001011,%11101000
FCB %00000000,%00001011,%11101000 ;10
FCB %00000000,%00001000,%00001000
FCB %00000000,%00001000,%00001000
FCB %00000000,%00001000,%00001000
FCB %00000000,%00100011,%11100010
FCB %00000000,%00100011,%11100010 ;15
FCB %00000000,%00100011,%11100010
FCB %00000000,%00100011,%11100010
FCB %00000000,%00101100,%00011010
FCB %00000000,%00101100,%00011010
FCB %00000000,%00101011,%11101000 ;20
FCB %00000000,%00001011,%11101000
FCB %00000000,%00000011,%11100000 ;22 (or $16) $20x$16=$2C0
ROADSIDE FCB %10111011
FCB %11101110
FCB %10111011
FCB %11101110
FCB %10111011
FCB %11101110
FCB %10111011
FCB %11101110 ;8
ROADMID FCB %00000000
FCB %00000000
FCB %00000000
FCB %00000100
FCB %00000000
FCB %00000000
FCB %00010000
FCB %00000000 ;8
ROADBERML FCB %11001100
FCB %00110011
FCB %11001100
FCB %11000011
FCB %11001100
FCB %00110000
FCB %11000000
FCB %11000000
ROADBERML2
;FCB %11000000
FCB %11000000
FCB %00110000
FCB %11001100
FCB %11000011
FCB %11001100
FCB %00110011
FCB %11001100
FCB %11001100
ROADBERMR FCB %00110011
FCB %11001100
FCB %00110011
FCB %11000011
FCB %00110011
FCB %00001100
FCB %00000011
FCB %00000011
ROADBERMR2
;FCB %00000011
FCB %00000011
FCB %00001100
FCB %00110011
FCB %11000011
FCB %00110011
FCB %11001100
FCB %00110011
FCB %00110011
BUSH FCB %01100110
FCB %10011001
FCB %01100110
FCB %10011001
FCB %01100110
FCB %10011001
FCB %01100110
FCB %10011001
WATER1 FCB %01010101
FCB %11010101
FCB %01010101
FCB %01010101
FCB %01010101
FCB %01010111
FCB %01010101
FCB %01010101
WATER2 FCB %11010101
FCB %01010101
FCB %01010101
FCB %01010101
FCB %01010101
FCB %01011101
FCB %01010101
FCB %01010101
BRIDGERLFT FCB %01100111
FCB %01100111
FCB %01100111
FCB %01111111
FCB %01111111
FCB %01100111
FCB %01100111
FCB %01100111
BRIDGEDECKL FCB %11110000
FCB %11110000
FCB %11110000
FCB %11110000
FCB %11110000
FCB %11110000
FCB %11110000
FCB %11110000
BRIDGERRT FCB %11110011
FCB %11110011
FCB %11110011
FCB %11111111
FCB %11111111
FCB %11110011
FCB %11110011
FCB %11110011
BRIDGEDECKR FCB %00000111
FCB %00000111
FCB %00000111
FCB %00000111
FCB %00000111
FCB %00000111
FCB %00000111
FCB %00000111
GUNSHOT0 FCB %00110000,%00000000,%00000000
FCB %00100000,%00000000,%00000000
FCB %00100000,%00000000,%00000000
FCB %00100000,%11000000,%00000000
FCB %00000000,%10000000,%00000000
FCB %00000000,%10000000,%00000000
FCB %00000000,%10000000,%00000000
FCB %00000000,%00000000,%00000000
GUNSHOT1 FCB %00001100,%00000000,%00000000
FCB %00001000,%00000000,%00000000
FCB %00001000,%00000000,%00000000
FCB %00001000,%00110000,%00000000
FCB %00000000,%00100000,%00000000
FCB %00000000,%00100000,%00000000
FCB %00000000,%00100000,%00000000
FCB %00000000,%00000000,%00000000
GUNSHOT2 FCB %00000011,%00000000,%00000000
FCB %00000010,%00000000,%00000000
FCB %00000010,%00000000,%00000000
FCB %00000010,%00001100,%00000000
FCB %00000000,%00001000,%00000000
FCB %00000000,%00001000,%00000000
FCB %00000000,%00001000,%00000000
FCB %00000000,%00000000,%00000000
GUNSHOT3 FCB %00000000,%11000000,%00000000
FCB %00000000,%10000000,%00000000
FCB %00000000,%10000000,%00000000
FCB %00000000,%10000011,%00000000
FCB %00000000,%00000010,%00000000
FCB %00000000,%00000010,%00000000
FCB %00000000,%00000010,%00000000
FCB %00000000,%00000000,%00000000
GUNSHOT4 FCB %00000000,%00110000,%00000000
FCB %00000000,%00100000,%00000000
FCB %00000000,%00100000,%00000000
FCB %00000000,%00100000,%11000000
FCB %00000000,%00000000,%10000000
FCB %00000000,%00000000,%10000000
FCB %00000000,%00000000,%10000000
FCB %00000000,%00000000,%00000000
GUNSHOT5 FCB %00000000,%00001100,%00000000
FCB %00000000,%00001000,%00000000
FCB %00000000,%00001000,%00000000
FCB %00000000,%00001000,%00110000
FCB %00000000,%00000000,%00100000
FCB %00000000,%00000000,%00100000
FCB %00000000,%00000000,%00100000
FCB %00000000,%00000000,%00000000
OIL0 FCB %01000100,%01000100,%00000000
FCB %00000001,%00000000,%00000000
FCB %00010000,%00010000,%00000000
FCB %01000100,%01000100,%00000000
FCB %00000001,%00000000,%00000000
FCB %00010000,%00010000,%00000000
FCB %01000100,%01000100,%00000000
FCB %00010001,%00010000,%00000000
OIL1 FCB %00010001,%00010001,%00000000
FCB %00000000,%01000000,%00000000
FCB %00000100,%00000100,%00000000
FCB %00010001,%00010001,%00000000
FCB %00000000,%01000000,%00000000
FCB %00000100,%00000100,%00000000
FCB %00010001,%00010001,%00000000
FCB %00000100,%01000100,%00000000
OIL2 FCB %00000100,%01000100,%01000000
FCB %00000000,%00010000,%00000000
FCB %00000001,%00000001,%00000000
FCB %00000100,%01000100,%01000000
FCB %00000000,%00010000,%00000000
FCB %00000001,%00000001,%00000000
FCB %00000100,%01000100,%01000000
FCB %00000001,%00010001,%00000000
OIL3 FCB %00000001,%00010001,%00010000
FCB %00000000,%00000100,%00000000
FCB %00000000,%01000000,%01000000
FCB %00000001,%00010001,%00010000
FCB %00000000,%00000100,%00000000
FCB %00000000,%01000000,%01000000
FCB %00000001,%00010001,%00010000
FCB %00000000,%01000100,%01000000
OIL4 FCB %00000000,%01000100,%01000100
FCB %00000000,%00000001,%00000000
FCB %00000000,%00010000,%00010000
FCB %00000000,%01000100,%01000100
FCB %00000000,%00000001,%00000000
FCB %00000000,%00010000,%00010000
FCB %00000000,%01000100,%01000100
FCB %00000000,%00010001,%00010000
OIL5 FCB %00000000,%00010001,%00010001
FCB %00000000,%00000000,%01000000
FCB %00000000,%00000100,%00000100
FCB %00000000,%00010001,%00010001
FCB %00000000,%00000000,%01000000
FCB %00000000,%00000100,%00000100
FCB %00000000,%00010001,%00010001
FCB %00000000,%00000100,%01000100
AFONT fcb %11111110
fcb %11000110
fcb %11111110
fcb %11111110
fcb %11000110
fcb %11000110
fcb %11000110
EFONT fcb %11111110
fcb %11100000
fcb %11111110
fcb %11111110
fcb %11100000
fcb %11100000
fcb %11111110
GFONT fcb %11111110
fcb %11000000
fcb %11000000
fcb %11001111
fcb %11000110
fcb %11111110
fcb %00111110
IFONT fcb %01111110
fcb %00111100
fcb %00111100
fcb %00111100
fcb %00111100
fcb %00111100
fcb %01111110
KFONT fcb %01100010
fcb %01100110
fcb %01101100
fcb %01111000
fcb %01111000
fcb %01101100
fcb %01100110
LFONT fcb %11100000
fcb %11100000
fcb %11100000
fcb %11100000
fcb %11100000
fcb %11100000
fcb %11111110
MFONT fcb %11111111
fcb %11001001
fcb %11001001
fcb %11001001
fcb %11001001
fcb %11001001
fcb %11000001
NFONT fcb %11111110
fcb %11111110
fcb %11100110
fcb %11100110
fcb %11100110
fcb %11100110
fcb %11100110
OFONT fcb %01111111
fcb %01100011
fcb %01100011
fcb %01100011
fcb %01100011
fcb %01100011
fcb %01111111
RFONT fcb %11111110
fcb %11100110
fcb %11100110
fcb %11111100
fcb %11111110
fcb %11100110
fcb %11100110
SFONT fcb %11111110
fcb %11100000
fcb %11111110
fcb %11111110
fcb %00001110
fcb %00001110
fcb %11111110
UFONT fcb %11100110
fcb %11100110
fcb %11100110
fcb %11100110
fcb %11100110
fcb %11100110
fcb %11111110
VFONT fcb %11100110
fcb %11100110
fcb %11100110
fcb %11100110
fcb %01100110
fcb %01101100
fcb %00111000
WFONT fcb %11000001
fcb %11001001
fcb %11001001
fcb %11001001
fcb %11001001
fcb %11001001
fcb %11111111
XFONT fcb %11000110
fcb %11000110
fcb %11111110
fcb %00111100
fcb %11000110
fcb %11000110
fcb %11000110
; **** Road Course Table ****
;**** Address is location of Flipped Row Graphic to PUL FROM
;Road #:
;#1 Yellow Birm Down Bush1: #$1A00+ScreenSize = $1A00 on 1st Screen + $1800 = $3200 + SPRITEOFF ($4400)=$7600 (In Table as $76,$00 (LDD loads 2 bytes))
;#2 Yellow Birm Down Bush2: #$1A00-$200+ScreenSize+SPRITEOFF = $7400
;#3 Yellow Birm Up Bush1: #$7400-$200 = $7200
;#4 Yellow Birm Up Bush2: #$7000
;#5 Bridge Water1 : #$6E00
;#6 Bridge Water2 : #$6C00
;ROAD COURSE - Graphic Address to PUL - $HighByte,$LowByte,Offset(# of bytes)
; Offset is position of Road Graphic on Screen + to the Right, - to the Left (1 byte per #)
COURSE FCB $76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0,$76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0,$76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0 ;36 items
FCB $76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0,$76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0,$76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0
FCB $76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0,$76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0,$76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0
FCB $76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0,$76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0,$76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0
FCB $76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0,$76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0,$76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0 ;5
FCB $76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0,$76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0,$76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0
FCB $76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0,$76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0,$76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0
FCB $76,$00,1,$74,$00,1,$72,$00,2,$70,$00,2,$76,$00,3,$74,$00,3,$72,$00,4,$70,$00,4,$76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5
FCB $76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5,$76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5,$76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5
FCB $76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5,$76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5,$76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5 ;10
FCB $76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5,$76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5,$76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5
FCB $76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5,$76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5,$76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5
FCB $76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5,$76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5,$76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5
FCB $76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5,$76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5,$76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5
FCB $76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5,$76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5,$76,$00,5,$74,$00,5,$72,$00,5,$70,$00,5 ;15 (more lines cause flicker near GUNS?)
FCB $76,$00,4,$74,$00,4,$72,$00,3,$70,$00,3,$76,$00,2,$74,$00,2,$72,$00,1,$70,$00,1,$76,$00,0,$74,$00,0,$72,$00,-1,$70,$00,-1
FCB $76,$00,-2,$74,$00,-2,$72,$00,-3,$70,$00,-3,$76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4,$76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4
FCB $76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4,$76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4,$76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4
FCB $76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4,$76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4,$76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4
FCB $76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4,$76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4,$76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4 ;20
FCB $76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4,$76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4,$76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4
FCB $76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4,$76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4,$76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4
FCB $76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4,$76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4,$76,$00,-4,$74,$00,-4,$72,$00,-4,$70,$00,-4
FCB $76,$00,-3,$74,$00,-3,$72,$00,-2,$70,$00,-2,$76,$00,-1,$74,$00,-1,$72,$00,0,$70,$00,0,$76,$00,0,$74,$00,0,$72,$00,0,$70,$00,0
FCB $6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0 ;25
FCB $6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0
FCB $6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0
FCB $6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0
FCB $6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0
FCB $6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0,$6E,$00,0,$6C,$00,0 ;30
FCB $FF,$FF
;This Subroutine set the SAM chip registers
;A Register = The number of bits to set
;B Register = The bits to feed into the SAM
;X Register = The address of the first bit to set.
;Only A,B and X are used. They are changed.
;All other registers unchanged
;On the SAM, the even address clears the bit and odd location set it.
SetSAMdata lsrb ;move the lower bit of data into the carry flag
bcs SetSAMdata1 ;skip if the bit was set
sta ,x++ ;store at even address was 0 and skip two
bra SetSAMdata2 ;and then skip
SetSAMdata1 leax 1,x ;move to odd address
sta ,x+ ;and store there and move pointer by 1
SetSAMdata2 deca ;any more bits to do?
bne SetSAMdata ;yes, Then loop
ChScrExit rts ;no, then exit setting up SAM
;START the Program:
;Clear both hi-res screens.
START
orcc #%01010000 ;disable the fast & normal Interrupts.
LDA $FF03 ;PIA0 SIde B Control Register - PIA0BC
ANDA #%11111110 ;Clear Bit 0 - VSYNC Disabled
STA $FF03 ;Save Settings
LDA $FF01 ;PIA0 Side A Control Register - PIA0AC
ANDA #%11111110 ;Clear Bit 0 - HSYNC Disabled
STA $FF01 ;Save Settings
;
LDX #$77FF ;Clear Sprite memory
CLSSPRITE CLR ,-X
CMPX #$6000
BNE CLSSPRITE
;now, clear the two screen memory buffers
ldx #Screen2Loc+ScreenSize ;Get end of screen memory+1
clsLoop clr ,-x ;clear screen backwards
cmpx #Screen1Loc ;are we at the start of screen memory
bne clsLoop ;loop if not
;X register is now pointing to the start of graphics memory
;
;Now that the screen is cleared, time to switch to Hi-Res graphics mode
lda #Pmode4VDG ;get graphics mode P4 (Black & White)
sta VDGPort ;config the Graphic mode I/O port
;Now, let's setup the SAM chip with the graphics mode
ldb #SAMpmode4 ;Get the Pmode4 bits to send to the SAM Chip
lda #SAMvregsBC ;Get the number of bit to sent it
ldx #SAMvregs ;Get the address of V1,V2 & V3 to set
lbsr SetSAMdata ;This call sets those bit
;ROAD Graphics Draw at $6000 ********************
; Road #1:
; BERM Graphic LEFT ******************
LDY #$1B08+ScreenSize+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #ROADBERML2 ;Berm Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; BERM Graphic RIGHT *****************
LDY #$1B17+ScreenSize+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #ROADBERMR2 ;Berm Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Road Side Left ******************
LDY #$1B00+ScreenSize+SPRITEOFF
LDB #0 ;# of Side Road Lines
LDX #0 ;# accross screen
LDU #ROADSIDE ;Graphic Location
SIDEROW LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #8 ;End of Graphic?
BNE SIDEROW ;NO - loop back to next line
LEAY -$FF,Y ;Move 1 address to Right
LDB #0
LEAX 1,X
CMPX #8 ;Number of Side Graphics
BNE SIDEROW
; Road Side Right ******************
LDY #$1B18+ScreenSize+SPRITEOFF
LDB #0 ;# of Side Road Lines
LDX #0 ;# accross screen
LDU #ROADSIDE ;Graphic Location
SIDEROW2 LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #8 ;End of Graphic?
BNE SIDEROW2 ;NO - loop back to next line
LEAY -$FF,Y ;Move 1 address to Right
LDB #0
LEAX 1,X
CMPX #8 ;Number of Side Graphics
BNE SIDEROW2
; Road Bush Left ******************
LDY #$1B02+ScreenSize+SPRITEOFF
LDB #0 ;# of Lines
LDU #BUSH ;Bush Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Road Bush Right ******************
LDY #$1B19+ScreenSize+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #BUSH ;Bush Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Road in Mid ******************
; LDY #$1B0B+ScreenSize+SPRITEOFF ;Road Start Location
; LDB #0 ;# of Side Road Lines
; LDX #0 ;# accross screen
; LDU #ROADMID ;Road Graphic Location
;Road1 LDA B,U ;LOAD A with Graphic Byte
; STA ,Y ;Put Graphic Byte on screen
; LEAY $20,Y ;Move to next line
; INCB ;Incr line pointer
; CMPB #8 ;End of Graphic?
; BNE Road1 ;NO - loop back to next line
; LEAY -$FF,Y ;Move 1 address to Right
; LDB #0
; LEAX 1,X
; CMPX #14 ;Number of Road Graphics
; BNE Road1
; ROAD #2:
; BERM Graphic LEFT ******************
LDY #$1B08+ScreenSize-$200+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #ROADBERML2 ;Berm Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; BERM Graphic RIGHT *****************
LDY #$1B17+ScreenSize-$200+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #ROADBERMR2 ;Berm Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Road Side Left ******************
LDY #$1B00+ScreenSize-$200+SPRITEOFF
LDB #0 ;# of Side Road Lines
LDX #0 ;# accross screen
LDU #ROADSIDE ;Berm Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #8 ;End of Graphic?
BNE < ;NO - loop back to next line
LEAY -$FF,Y ;Move 1 address to Right
LDB #0
LEAX 1,X
CMPX #8 ;Number of Side Graphics
BNE <
;
; Road Side Right ******************
LDY #$1B18+ScreenSize-$200+SPRITEOFF
LDB #0 ;# of Side Road Lines
LDX #0 ;# accross screen
LDU #ROADSIDE ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #8 ;End of Graphic?
BNE < ;NO - loop back to next line
LEAY -$FF,Y ;Move 1 address to Right
LDB #0
LEAX 1,X
CMPX #8 ;Number of Side Graphics
BNE <
; Road Bush Left ******************
LDY #$1B03+ScreenSize-$200+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #BUSH ;Bush Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Road Bush Right ******************
LDY #$1B20+ScreenSize-$200+SPRITEOFF
LDB #0 ;# of Lines
LDU #BUSH ;Bush Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;; ROAD #3:
;; BERM Graphic LEFT ******************
LDY #$1B08-$400+ScreenSize+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #ROADBERML ;Berm Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; BERM Graphic RIGHT *****************
LDY #$1B17-$400+ScreenSize+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #ROADBERMR ;Berm Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Road Side Left ******************
LDY #$1B00-$400+ScreenSize+SPRITEOFF
LDB #0 ;# of Side Road Lines
LDX #0 ;# accross screen
LDU #ROADSIDE ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #8 ;End of Graphic?
BNE < ;NO - loop back to next line
LEAY -$FF,Y ;Move 1 address to Right
LDB #0
LEAX 1,X
CMPX #8 ;Number of Side Graphics
BNE <
; Road Side Right ******************
LDY #$1B18-$400+ScreenSize+SPRITEOFF
LDB #0 ;# of Side Road Lines
LDX #0 ;# accross screen
LDU #ROADSIDE ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #8 ;End of Graphic?
BNE < ;NO - loop back to next line
LEAY -$FF,Y ;Move 1 address to Right
LDB #0
LEAX 1,X
CMPX #8 ;Number of Side Graphics
BNE <
; Road Bush Left ******************
LDY #$1B06+ScreenSize-$400+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #BUSH ;Bush Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Road 4:
; BERM Graphic LEFT ******************
LDY #$1B08+ScreenSize-$600+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #ROADBERML ;Berm Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; BERM Graphic RIGHT *****************
LDY #$1B17+ScreenSize-$600+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #ROADBERMR ;Berm Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Road Side Left ******************
LDY #$1B00+ScreenSize-$600+SPRITEOFF
LDB #0 ;# of Side Road Lines
LDX #0 ;# accross screen
LDU #ROADSIDE ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #8 ;End of Graphic?
BNE < ;NO - loop back to next line
LEAY -$FF,Y ;Move 1 address to Right
LDB #0
LEAX 1,X
CMPX #8 ;Number of Side Graphics
BNE <
; Road Bush Left ******************
LDY #$1B04+ScreenSize-$600+SPRITEOFF
LDB #0 ;# of Lines
LDU #BUSH ;Bush Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Road Side Right ******************
LDY #$1B18+ScreenSize-$600+SPRITEOFF
LDB #0 ;# of Side Road Lines
LDX #0 ;# accross screen
LDU #ROADSIDE ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #8 ;End of Graphic?
BNE < ;NO - loop back to next line
LEAY -$FF,Y ;Move 1 address to Right
LDB #0
LEAX 1,X
CMPX #8 ;Number of Side Graphics
BNE <
; Road Bush Right ******************
LDY #$1B1C+ScreenSize-$600+SPRITEOFF
LDB #0 ;# of Lines
LDU #BUSH ;Bush Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Road 5:
; WATER Side Left ******************
LDY #$1AFE+ScreenSize-$800+SPRITEOFF
LDB #0 ;# of Side Road Lines
LDX #0 ;# accross screen
LDU #WATER1 ;Water Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #8 ;End of Graphic?
BNE < ;NO - loop back to next line
LEAY -$FF,Y ;Move 1 address to Right
LDB #0
LEAX 1,X
CMPX #10 ;Number of Side Graphics
BNE <
; WATER Right Left ******************
LDY #$1B18+ScreenSize-$800+SPRITEOFF
LDB #0 ;# of Side Road Lines
LDX #0 ;# accross screen
LDU #WATER1 ;Water Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #8 ;End of Graphic?
BNE < ;NO - loop back to next line
LEAY -$FF,Y ;Move 1 address to Right
LDB #0
LEAX 1,X
CMPX #10 ;Number of Side Graphics
BNE <
; Bridge Rail Graphic LEFT ******************
LDY #$1B08+ScreenSize-$800+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #BRIDGERLFT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Bridge Rail Graphic RIGHT ******************
LDY #$1B17+ScreenSize-$800+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #BRIDGERRT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Bridge DECK Graphic LEFT ******************
LDY #$1B09+ScreenSize-$800+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #BRIDGEDECKL ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Bridge DECK Graphic RIGHT ******************
LDY #$1B16+ScreenSize-$800+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #BRIDGEDECKR ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Road 6:
; WATER Side Left ******************
LDY #$1AFE+ScreenSize-$A00+SPRITEOFF
LDB #0 ;# of Side Road Lines
LDX #0 ;# accross screen
LDU #WATER2 ;Water Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #8 ;End of Graphic?
BNE < ;NO - loop back to next line
LEAY -$FF,Y ;Move 1 address to Right
LDB #0
LEAX 1,X
CMPX #10 ;Number of Side Graphics
BNE <
; WATER Right Left ******************
LDY #$1B18+ScreenSize-$A00+SPRITEOFF
LDB #0 ;# of Side Road Lines
LDX #0 ;# accross screen
LDU #WATER2 ;Water Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #8 ;End of Graphic?
BNE < ;NO - loop back to next line
LEAY -$FF,Y ;Move 1 address to Right
LDB #0
LEAX 1,X
CMPX #10 ;Number of Side Graphics
BNE <
; Bridge Rail Graphic LEFT ******************
LDY #$1B08+ScreenSize-$A00+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #BRIDGERLFT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Bridge Rail Graphic RIGHT ******************
LDY #$1B17+ScreenSize-$A00+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #BRIDGERRT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Bridge DECK Graphic LEFT ******************
LDY #$1B09+ScreenSize-$A00+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #BRIDGEDECKL ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
; Bridge DECK Graphic RIGHT ******************
LDY #$1B16+ScreenSize-$A00+SPRITEOFF
LDB #0 ;# of Berm Lines
LDU #BRIDGEDECKR ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;OIL Test Draw on Page #1
; DRAW SPY HUNTER CAR 30 ***********************
; LDY #$0519 ;$2C0=One Car height Down ($0A99 old location)
; LDX #1 ;# OF LINES OF CAR
; LDU #SPYCAR30 ;CAR GRAPHIC LOCATION-
;! LDA ,U+ ;LOAD A WITH FIRST CAR GRAPHIC
; STA ,Y+ ;Store A at Y, add $1
; LDA ,U+
; STA ,Y+
; LDA ,U+
; STA ,Y
; LEAY $1E,Y ;INCR ADDRESS BY $1E(D1,L3) TO NEXT LINE
; LEAX 1,X ;NEXT LINE OF CAR
; CMPX #23
; BNE <
;;
; LDY #$07D9 ; On Page 1
; LDX #1 ;# OF LINES OF Shot
; LDU #OIL0 ;Load current Oil Graphic Address
;! LDA ,U+ ;LOAD A with OIL graphic byte row (OIL is 3 bytes wide)
; STA ,Y+ ;Store A at Y
; LDA ,U+ ;LOAD A with 2nd Byte of Oil
; STA ,Y+
; LDA ,U+ ;LOAD A with 3rd Byte of Oil
; STA ,Y
; LEAY $1E,Y ;INCR ADDRESS BY $1E(Down 1,Left 3) of OIL graphic
; LEAX 1,X ;NEXT LINE OF OIL
; CMPX #8
; BNE <
; LDY #$08D9 ; On Page 1
; LDX #1 ;# OF LINES OF Shot
; LDU #OIL0 ;Load current Oil Graphic Address
;! LDA ,U+ ;LOAD A with OIL graphic byte row (OIL is 3 bytes wide)
; STA ,Y+ ;Store A at Y
; LDA ,U+ ;LOAD A with 2nd Byte of Oil
; STA ,Y+
; LDA ,U+ ;LOAD A with 3rd Byte of Oil
; STA ,Y
; LEAY $1E,Y ;INCR ADDRESS BY $1E(Down 1,Left 3) of OIL graphic
; LEAX 1,X ;NEXT LINE OF OIL
; CMPX #8
; BNE <
; LDY #$09D9 ; On Page 1
; LDX #1 ;# OF LINES OF Shot
; LDU #OIL0 ;Load current Oil Graphic Address
;! LDA ,U+ ;LOAD A with OIL graphic byte row (OIL is 3 bytes wide)
; STA ,Y+ ;Store A at Y
; LDA ,U+ ;LOAD A with 2nd Byte of Oil
; STA ,Y+
; LDA ,U+ ;LOAD A with 3rd Byte of Oil
; STA ,Y
; LEAY $1E,Y ;INCR ADDRESS BY $1E(Down 1,Left 3) of OIL graphic
; LEAX 1,X ;NEXT LINE OF OIL
; CMPX #8
; BNE <
; LDY #$0ADA ; On Page 1
; LDX #1 ;# OF LINES OF Shot
; LDU #OIL0 ;Load current Oil Graphic Address
;! LDA ,U+ ;LOAD A with OIL graphic byte row (OIL is 3 bytes wide)
; STA ,Y+ ;Store A at Y
; LDA ,U+ ;LOAD A with 2nd Byte of Oil
; STA ,Y+
; LDA ,U+ ;LOAD A with 3rd Byte of Oil
; STA ,Y
; LEAY $1E,Y ;INCR ADDRESS BY $1E(Down 1,Left 3) of OIL graphic
; LEAX 1,X ;NEXT LINE OF OIL
; CMPX #8
; BNE <
;**** Stack Blasting to Prepare Road Graphics ******************
;***********************
; ROAD#1 First Copy ***
LDS #$1AFF+ScreenSize+$1+SPRITEOFF * Where to Copy TO - 1 HEIGHT $1BFF-$100=$1AFF on RIGHT side of Screen
LDU #$1B00+ScreenSize+SPRITEOFF * Address of data to copy FROM - TOP Left of ROADSIDE
Copy_bg1:
PULU D,X,Y,DP,CC * load the registers and move U forward
PSHS D,X,Y,DP,CC * Store the data and move S backwards
CMPU #$1BFF+ScreenSize+SPRITEOFF * Check if U has reached the end of data (Bott Rt of Screen)
BLO Copy_bg1 * if not keep copying
;***********************
; ROAD#2 First Copy ***
LDS #$1AFF+ScreenSize+$1-$200+SPRITEOFF * Where to Copy TO - 1 HEIGHT $1BFF-$100=$1AFF on RIGHT side of Screen
LDU #$1B00+ScreenSize-$200+SPRITEOFF * Address of data to copy FROM - TOP Left of ROADSIDE
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU #$1BFF+ScreenSize-$200+SPRITEOFF * Check if U has reached the end of data (Bott Rt of Screen)
BLO < * if not keep copying
;***********************
; ROAD#3 First Copy ***
LDS #$1AFF+ScreenSize+$1-$400+SPRITEOFF * Where to Copy TO - 1 HEIGHT $1BFF-$100=$1AFF on RIGHT side of Screen
LDU #$1B00+ScreenSize-$400+SPRITEOFF * Address of data to copy FROM - TOP Left of ROADSIDE
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU #$1BFF+ScreenSize-$400+SPRITEOFF * Check if U has reached the end of data (Bott Rt of Screen)
BLO < * if not keep copying
;***********************
; ROAD#4 First Copy ***
LDS #$1AFF+ScreenSize+$1-$600+SPRITEOFF * Where to Copy TO - 1 HEIGHT $1BFF-$100=$1AFF on RIGHT side of Screen
LDU #$1B00+ScreenSize-$600+SPRITEOFF * Address of data to copy FROM - TOP Left of ROADSIDE
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU #$1BFF+ScreenSize-$600+SPRITEOFF * Check if U has reached the end of data (Bott Rt of Screen)
BLO < * if not keep copying
;***********************
; ROAD#5 First Copy ***
LDS #$1AFF+ScreenSize+$1-$800+SPRITEOFF * Where to Copy TO - 1 HEIGHT $1BFF-$100=$1AFF on RIGHT side of Screen
LDU #$1B00+ScreenSize-$800+SPRITEOFF * Address of data to copy FROM - TOP Left of ROADSIDE
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU #$1BFF+ScreenSize-$800+SPRITEOFF * Check if U has reached the end of data (Bott Rt of Screen)
BLO < * if not keep copying
;***********************
; ROAD#6 First Copy ***
LDS #$1AFF+ScreenSize+$1-$A00+SPRITEOFF * Where to Copy TO - 1 HEIGHT $1BFF-$100=$1AFF on RIGHT side of Screen
LDU #$1B00+ScreenSize-$A00+SPRITEOFF * Address of data to copy FROM - TOP Left of ROADSIDE
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU #$1BFF+ScreenSize-$A00+SPRITEOFF * Check if U has reached the end of data (Bott Rt of Screen)
BLO < * if not keep copying
;
lds #StackTop ;reset the stack pointer
;**** Draw Weapons Bezel Graphics ****
;Page #1 ($400 - $1BFF)
; * Bezel Line *****************
LDY #$1A20
LDA #%11111111 ;Line
!
STA ,Y+ ;Put Graphic Byte on screen
CMPY #$1A80
BNE <
;
;'M'
LDY #$1AC1
LDB #0 ;# of Font lines
LDU #MFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'I'
LDY #$1AC2
LDB #0 ;# of Font lines
LDU #IFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'S'
LDY #$1AC3
LDB #0 ;# of Font lines
LDU #SFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'L'
LDY #$1AC4
LDB #0 ;# of Font lines
LDU #LFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'O'
LDY #$1AC8
LDB #0 ;# of Font lines
LDU #OFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'I'
LDY #$1AC9
LDB #0 ;# of Font lines
LDU #IFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'L'
LDY #$1ACA
LDB #0 ;# of Font lines
LDU #LFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'V'
LDY #$1ACE
LDB #0 ;# of Font lines
LDU #VFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'A'
LDY #$1ACF
LDB #0 ;# of Font lines
LDU #AFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'N'
LDY #$1AD0
LDB #0 ;# of Font lines
LDU #NFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'S'
LDY #$1AD4
LDB #0 ;# of Font lines
LDU #SFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'M'
LDY #$1AD5
LDB #0 ;# of Font lines
LDU #MFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'O'
LDY #$1AD6
LDB #0 ;# of Font lines
LDU #OFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'K'
LDY #$1AD7
LDB #0 ;# of Font lines
LDU #KFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'E'
LDY #$1AD8
LDB #0 ;# of Font lines
LDU #EFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;
;White Highlight
LDY #$1A9A
LDB #0 ;# of Highlight Lines
LDX #0 ;# accross screen
! LDA #%11111111 ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #12 ;End of Graphic?
BNE < ;NO - loop back to next line
LEAY -$17F,Y ;Move Back UP (to $1A9A) and 1 address to Right
LDB #0
LEAX 1,X
CMPX #6 ;Number of Side Graphics
BNE <
;
;'G'
LDY #$1ADB
LDB #0 ;# of Font lines
LDU #GFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
EORA #%11111111
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'U'
LDY #$1ADC
LDB #0 ;# of Font lines
LDU #UFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
EORA #%11111111
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'N'
LDY #$1ADD
LDB #0 ;# of Font lines
LDU #NFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
EORA #%11111111
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'S'
LDY #$1ADE
LDB #0 ;# of Font lines
LDU #SFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
EORA #%11111111
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;Page #2 ($1C00 - $33FF):
; * Bezel Line *****************
LDY #$1A20+$1800
LDA #%11111111 ;Line
!
STA ,Y+ ;Put Graphic Byte on screen
CMPY #$1A80+$1800
BNE <
;'M'
LDY #$1AC1+$1800
LDB #0 ;# of Font lines
LDU #MFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'I'
LDY #$1AC2+$1800
LDB #0 ;# of Font lines
LDU #IFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'S'
LDY #$1AC3+$1800
LDB #0 ;# of Font lines
LDU #SFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'L'
LDY #$1AC4+$1800
LDB #0 ;# of Font lines
LDU #LFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
;
BNE < ;NO - loop back to next line
;'O'
LDY #$1AC8+$1800
LDB #0 ;# of Font lines
LDU #OFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'I'
LDY #$1AC9+$1800
LDB #0 ;# of Font lines
LDU #IFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'L'
LDY #$1ACA+$1800
LDB #0 ;# of Font lines
LDU #LFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'V'
LDY #$1ACE+$1800
LDB #0 ;# of Font lines
LDU #VFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'A'
LDY #$1ACF+$1800
LDB #0 ;# of Font lines
LDU #AFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'N'
LDY #$1AD0+$1800
LDB #0 ;# of Font lines
LDU #NFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'S'
LDY #$1AD4+$1800
LDB #0 ;# of Font lines
LDU #SFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'M'
LDY #$1AD5+$1800
LDB #0 ;# of Font lines
LDU #MFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'O'
LDY #$1AD6+$1800
LDB #0 ;# of Font lines
LDU #OFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'K'
LDY #$1AD7+$1800
LDB #0 ;# of Font lines
LDU #KFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'E'
LDY #$1AD8+ScreenSize
LDB #0 ;# of Font lines
LDU #EFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;White Highlight
LDY #$1A9A+ScreenSize
LDB #0 ;# of Highlight Lines
LDX #0 ;# accross screen
! LDA #%11111111 ;LOAD A with Graphic Byte
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #12 ;End of Graphic?
BNE < ;NO - loop back to next line
LEAY -$17F,Y ;Move Back UP (to $1A9A) and 1 address to Right
LDB #0
LEAX 1,X
CMPX #6 ;Number of Side Graphics
BNE <
;'G'
LDY #$1ADB+$1800
LDB #0 ;# of Font lines
LDU #GFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
EORA #%11111111
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'U'
LDY #$1ADC+$1800
LDB #0 ;# of Font lines
LDU #UFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
EORA #%11111111
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'N'
LDY #$1ADD+$1800
LDB #0 ;# of Font lines
LDU #NFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
EORA #%11111111
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;'S'
LDY #$1ADE+$1800
LDB #0 ;# of Font lines
LDU #SFONT ;Graphic Location
! LDA B,U ;LOAD A with Graphic Byte
EORA #%11111111
STA ,Y ;Put Graphic Byte on screen
LEAY $20,Y ;Move to next line
INCB ;Incr line pointer
CMPB #7 ;End of Graphic?
BNE < ;NO - loop back to next line
;###### Test Wait for Keystroke 'A' to Start Program ###############
;###############################################################
;WAITA LDA #$FD ; WRITE '0' TO BIT 1 - Very FAST will REPEAT
; STA $FF02 ; OF OUTPUT PORT MEM $FF02
; LDA $FF00 ; READ INPUT PORT $FF00
; CMPA #$FB ; P-KEY PRESSED? IF BIT 2=0 - WILL REPEAT IF KEY HELD DOWN
;; CMPA #$FE ; A-KEY PRESSED? IF BIT 0=0 - WILL REPEAT IF KEY HELD DOWN (USE FOR THRUST?)
; BNE WAITA
; POINT to Screen #1, Draw on Screen #2 (+$1800)
LDA #1 ;POINT TO SCREEN #1
STA SCPOINT ;Store Pointer
STA $FFCA ;CLEAR $800
STA $FFCC ;CLEAR $1000
STA $FFC9 ;TURN ON $400
;
; LDA #2 ;POINT TO SCREEN #2
; STA SCPOINT ;Store Pointer
; STA $FFCB ;TURN ON $800
; STA $FFCD ;TURN ON $1000
; STA $FFC9 ;TURN ON $400
; #### Initialize Variables ####
LDY #$1000+$10 ;Middle of Screen at Row $E00
STY CARX
LDY #$FFFF
STY OILX ;Initial Oil X position
STY OILX2
STY OILX3
STY OILX4
STY OILX5
STY OILX6
LDD #-$100 ;Starting GUNSHOT location above car
STD GUNLOC
LDD #$2C0-$100 ;Starting OIL location below car (1 car height)
STD OILLOC
LDY #SPYCAR30 ;Start with SPYCAR30 Graphic
STY CARGRAPH
LDY #GUNSHOT0 ;Start with GUNSHOT0 Graphic
STY SHOTGRAPH
LDB #0
STB CARXG
STB SHOT ;Start with No Shot Trigger
STB CARNUM ;Start with Car #0 (SPYCAR)
STB OTRIG ;Start with Oil Trig = 0
LDB #1
STB SOIL ;Start with Spray Oil #1
LDX #$1800
STX WorkScreen ; WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDA #10 ; Starting SPEED set point (Lower = Faster Road Move)
STA SPEEDSET
;
LDX #0 * Load number (count by 2) of graphics in COURSE Table (i.e. number/loops of road line graphics to load to Top #1 line)
STX COURSEN
LDX #$1C00+SPRITEOFF ;Road Graphic #1: #$1500+ScreenSize = $400 on 1st Screen + $1800 = $1C00 on 2nd Screen - A blank row
STX ROADLINE1 * Blank Store ROADLINE1 Current PUL FROM Table address
STX ROADLINE2 * Blank Store ROADLINE2
STX ROADLINE3 * Blank Store ROADLINE3
STX ROADLINE4 * Blank Store ROADLINE4
STX ROADLINE5
STX ROADLINE6
STX ROADLINE7
STX ROADLINE8
STX ROADLINE9
STX ROADLINE10
STX ROADLINE11
STX ROADLINE12
STX ROADLINE13
STX ROADLINE14
STX ROADLINE15
STX ROADLINE16
STX ROADLINE17
STX ROADLINE18
STX ROADLINE19
STX ROADLINE20
STX ROADLINE21
STX ROADLINE22
; STX ROADLINE23
; STX ROADLINE24
; #### MAIN Program LOOP - ###########################################################
NEXTSCRN ;UPDATE Screen - 22 ROWS
; ####################################################################################
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
** SCREEN Update - FILL Screen Page #1 and #2 BOTTOM UP *********************
** COURSE = Address of Course Table
** COURSEN = Item in COURSE table - 2 items per Address + 1 item for Offset
**
** ROADLINE# = Address of Graphic to PULU from for specific Row #(1-24 from TOP)
** ROADGR = START Address of current Row Graphic (reversed & flipped)
** ROADGRE = END Address of current Row Graphic
** U is address of Road Graphic (to PUL from)
** S is addres of Road Graphic to PUS to (24 Rows Max, +$100 each)
;
;***** Load Screen Row #22 *****
LDX ROADLINE21
STX ROADLINE22 * Copy Row #21's Address to Row #22 current address
LDS #$19FF+$1 * $19FF+$1 Copy TO (backwards): Rt Side of Screen
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE21 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address (this moves Graphic Rt or Lft on Screen)
LDU #ROADLINE22 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE22 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #21 *****
LDX ROADLINE20 *
STX ROADLINE21 * Copy Row #20's Address to Row #21 current address
LDS #$18FF+$1 * $18FF+$1 Copy TO (backwards): Start on Rt Side of Screen
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE20 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address (this moves Graphic Rt or Lft on Screen)
LDU #ROADLINE21 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE21 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #20 *****
LDX ROADLINE19
STX ROADLINE20
LDS #$17FF+$1 * Copy TO (backwards)
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE19 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE20 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE20 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #19 *****
LDX ROADLINE18
STX ROADLINE19
LDS #$16FF+$1 *
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE18 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE19 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE19 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #18 *****
LDX ROADLINE17
STX ROADLINE18
LDS #$15FF+$1 *
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE17 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE18 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE18 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #17 *****
LDX ROADLINE16
STX ROADLINE17
LDS #$14FF+$1 *
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE16 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE17 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE17 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #16 *****
LDX ROADLINE15
STX ROADLINE16
LDS #$13FF+$1 *
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE15 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE16 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE16 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #15 *****
LDX ROADLINE14
STX ROADLINE15
LDS #$12FF+$1 *
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE14 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE15 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE15 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #14 *****
LDX ROADLINE13
STX ROADLINE14
LDS #$11FF+$1 *
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE13 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE14 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE14 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #13 *****
LDX ROADLINE12
STX ROADLINE13
LDS #$10FF+$1 *
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE12 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE13 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE13 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #12 *****
LDX ROADLINE11
STX ROADLINE12
LDS #$FFF+$1 *
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE11 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE12 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE12 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #11 *****
LDX ROADLINE10
STX ROADLINE11
LDS #$EFF+$1 *
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE10 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE11 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE11 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #10 *****
LDX ROADLINE9
STX ROADLINE10
LDS #$DFF+$1 *
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE9 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE10 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE10 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #9 *****
LDX ROADLINE8
STX ROADLINE9
LDS #$CFF+$1 *
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE8 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE9 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE9 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #8 *****
LDX ROADLINE7
STX ROADLINE8
LDS #$BFF+$1 *
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE7 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE8 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE8 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #7 *****
LDX ROADLINE6
STX ROADLINE7
LDS #$AFF+$1 *
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE6 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE7 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE7 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
lds #StackTop ;reset the stack pointer
;***** Load Screen Row #6 *****
LDX ROADLINE5
STX ROADLINE6
LDS #$9FF+$1 *
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE5 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE6 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE6 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #5 *****
LDX ROADLINE4
STX ROADLINE5
LDS #$8FF+$1 *
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE4 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE5 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE5 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #4 *****
LDX ROADLINE3
STX ROADLINE4
LDS #$7FF+$1 *
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE3 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE4 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE4 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #3 *****
LDX ROADLINE2
STX ROADLINE3
LDS #$6FF+$1
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE2 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE3 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE3 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #2 *****
LDX ROADLINE1
STX ROADLINE2
LDS #$5FF+$1 * $5FF+$1 Copy TO (backwards): Rt Side of Screen - $5FF is $4FF+$100
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDX #ROADLINE1 * LDX Address of ROADLINE1 variable
LDA 2,X * Load Current Graphic Offset
LEAS A,S * Add Offset to S address
LDU #ROADLINE2 *
STA 2,U * Store Offset at 1+ROADLINE2
LDU ROADLINE2 * LDU ROADLINE# Current PUL FROM address
STU ROADGR
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
;***** Load Screen Row #1 *****
LDS #$4FF+$1 * $4FF+$1 Copy TO (backwards): Rt Side of Screen
LDD WorkScreen * LDD with WorkScreen
LEAS D,S * WorkScreen = 0 for Screen Page 1, $1800 for Screen Page 2
LDD COURSEN * Load current COURSE NUMBER from table (16 bit # in D)
LDX #COURSE * Load Table Address
LEAX D,X * Add offset (D) to X address of COURSE Graphic (Flipped) from table: D is item location in table
LDU ,X * Load U with PUL address from Table at X;
CMPU #$FFFF * Check for end of Course
BEQ COURSERESET * Reset to end of Course
STU ROADGR * Save current Road Graphic Address
STU ROADLINE1 * Store ROADLINE# Current PUL FROM address
LDX ROADGR * Use X to calc end of Road Graphic
LEAX $FF,X
STX ROADGRE * Store Road Graphic address END (i.e. +$FF)
ADDD #2 * Move to Offset # (D 16 bit) in COURSE Table (i.e. address 2 bytes,offset 1 byte)
STD COURSEN * STD to current # in table (COURSEN)
LDX #COURSE * LDX with Table Address
LDA D,X * LDA (8 bit) with next byte (Graphic Offest) from table (COURSE) at D (16 bit)
LEAS A,S * Add Graphic Offset (# of bytes) to S address (for PSH) THIS Moves location of Road Graphic
LDX #ROADLINE1 * LOAD Address of ROADLINE1
STA 2,X * STA Offset Value at 1+ROADLINE1 adress for use by Next Road Line
!
PULU CC,D,DP,X,Y * load the registers and move U forward
PSHS Y,X,DP,D,CC * Store the data and move S backwards
CMPU ROADGRE * Check if U has reached end of Road Graphic data (i.e. +$FF)
BLO < * if not keep copying next Column of Road
; LDS TempMem * Restore Registers
; PULS D,X,Y,DP,CC
lds #StackTop ;reset the stack pointer
LDD COURSEN * Move to next Course Graphic location in COURSE Table
ADDD #1
STD COURSEN
BRA CARLOOP
; BRA CARMOVE
; BRA CHKOIL ; BRA to Oil Check
COURSERESET LDY #0 * LDY to reset Course location (in Table) to beginning
STY COURSEN
CARLOOP ;UPDATE Car Locations
; **** Joystick and Keyboard Inputs ****
; Joystick RIGHT Steering
lds #StackTop ;reset the stack pointer
JSR [JOYST]
LDA $15A ;Load Horiz Position
CMPA #45
LBHI MOVERT ;Move RIGHT FINE move
CMPA #15
LBLO MOVELFT ;Move LEFT FINE move
; Joystick RIGHT Button to Shoot
LDA 65280 :Load Button from $FF00
CMPA #126 ;0111 1110
BEQ TRIG
CMPA #254 ;1111 1110
BEQ TRIG
CMPA #124 ;0111 1100
BEQ TRIG
CMPA #252 ;1111 1100
BEQ TRIG
BRA NORTB ;Skip if NO Right Button
TRIG LDA #1 ;Trigger Shot = Y
STA SHOT
NORTB ;Skip Trigger to Shoot
; Joystick LEFT Button for OIL
LDA 65280
CMPA #125 ;0111 1101
BEQ TRIGO
CMPA #253 ;1111 1101
BEQ TRIGO
; CMPA #127 ;0111 1111
; BEQ TRIGO
; CMPA #255 ;1111 1111
; BEQ TRIGO
BRA NOOIL
; Key to Spray Oil (NOTE: Left Joystick Button does not reset ???)
; JSR [KEYIN] ; SCAN KEYBOARD - WILL NOT REPEAT IF KEY HELD DOWN
; CMPA #'O' ; 'O' Key to Spray Oil
; BNE NOOIL
TRIGO ; OIL Trigger
LDA SOIL : Load current Spray Oil #
CMPA #9
BLO >
LDA #1
STA SOIL
! CMPA #1
BNE >
LDY CARX
STY OILX ; Save current OIL at CARX location
! CMPA #2
BLO >
LDY CARX
STY OILX2
! CMPA #3
BLO >
LDY CARX
STY OILX3
! CMPA #4
BLO >
LDY CARX
STY OILX4
! CMPA #5
BLO >
LDY CARX
STY OILX5
! CMPA #6
BLO >
LDY CARX
STY OILX6
! CMPA #7
BLO >
LDY CARX
STY OILX7
! CMPA #8
BLO NOOIL
LDY CARX
STY OILX8
; LDA #1
; STA SOIL
NOOIL ;Skip if NO Left Butt
; Joystick RIGHT Speed (Up/Down)
LDA $15B ;Load Vert Pos
CMPA #15
LBLO ACCEL
CMPA #45
LBHI DECEL
LBRA ENDMOVE
; KEYS TO MOVE CAR
; JSR [KEYIN] ; SCAN KEYBOARD - WILL NOT REPEAT IF KEY HELD DOWN
; CMPA #'O' ;
; LBNE NOTRIG ; Skip Trigger in NO 'O' key
; LDA #1 ; Trigger Shot = Y
; STA SOIL
; CMPA #'Z
; LBEQ MOVELFT2 ; IF Z KEY, JMP TO LEFT 2 MOVE
; CMPA #'X ;
; LBEQ MOVELFT ; IF X KEY, JMP TO LEFT FINE MOVE
; CMPA #'C
; LBEQ MOVERT ; IF C Key, JMP to RIGHT FINE MOVE
; CMPA #'V
; LBEQ MOVERT2 ; IF V Key, JMP to RIGHT 2 MOVE
; CMPA #'N ; IF N Decrease SPEEDSET
; LBEQ DECEL
; CMPA #'M ; If M Increase SPEEDSET
; LBEQ ACCEL
; **** Move Routines ****
MOVERT LDB CARXG ; Load Current Graphic # (0-5) of Car
INCB ; Inc B with 1 move to Right
CMPB #6 ; 5 is last Graphic
BNE > ; Branch to next Grapic
LDB #0
STB CARXG
LDY CARX ; Move 2 Bytes to Right (3 bytes is 0-5 Graphic size)
LEAY 2,Y ;
STY CARX
!
STB CARXG
LDU #SPYCAR30 ; Load 1st Graphic - SPYCAR30
LDY #GUNSHOT0 ; Load 1st Shot Graphic - GUNSHOT0
CMPB #0
BEQ RTEND
! LEAU $42,U ; Move to next Car Graphic @ +$42
STU CARGRAPH
LEAY $18,Y ; Movew to next Shot Graphic @ +$18
STY SHOTGRAPH
DECB ;
CMPB #0
BNE <
RTEND
! STU CARGRAPH ; Update current Graphic
STY SHOTGRAPH
LBRA ENDMOVE
;
MOVERT2 LDB CARXG ; Load Current Graphic # (0-5) of Car
LDY CARX ; Move 1 Bytes to Right
LEAY 1,Y ;
STY CARX
! STB CARXG ;; Is this section needed for a whole 2 byte move???
LDU #SPYCAR30 ; Load 1st Graphic - SPYCAR30
CMPB #0
BEQ RT2END
! LEAU $42,U ; Move to next Graphic @ +$42
STU CARGRAPH
DECB ;
CMPB #0
BNE <
RT2END
! STU CARGRAPH ; Update current Graphic
LBRA ENDMOVE
;
MOVELFT2 LDB CARXG ; Current Graphic # (0-5) of Car
LDY CARX ; Move 1 Bytes to Left
LEAY -1,Y ;
STY CARX
! STB CARXG
LDU #SPYCAR35 ; Load 5th Graphic
STU CARGRAPH ; Store current Car Graphic
CMPB #5
BEQ LFT2END
! LEAU -$42,U ; Move to next Graphic @ -$42
STU CARGRAPH
INCB ;
CMPB #5
BNE <
LFT2END LBRA ENDMOVE
;
MOVELFT LDB CARXG ; Current Graphic # (0-5) of Car
DECB ; Load B with 1 move to Left
CMPB #-1 ; 0 is last Graphic
BNE > ; Branch to next Grapic
LDB #5
STB CARXG
LDY CARX ; Move 2 Bytes to Left(3 bytes is 0-5 Graphic size)
LEAY -2,Y ;
STY CARX
! STB CARXG
LDU #SPYCAR35 ; Load 5th Graphic
STU CARGRAPH ; Store current Car Graphic
LDY #GUNSHOT5
STY SHOTGRAPH
CMPB #5
BEQ LFTEND
! LEAU -$42,U ; Move to next Graphic @ -$42
STU CARGRAPH
LEAY -$18,Y
STY SHOTGRAPH
INCB ;
CMPB #5
BNE <
LFTEND LBRA ENDMOVE
;
DECEL LDA SPEEDSET
CMPA #200 ;Minimum Speed (i.e. MAX # loops until screen update)
BEQ ENDMOVE
ADDA #1
STA SPEEDSET
BRA ENDMOVE
ACCEL LDA SPEEDSET
CMPA #3 ;Max Speed (i.e. MIN # loop until screen update)
BEQ ENDMOVE
SUBA #1
STA SPEEDSET
BRA ENDMOVE
ENDMOVE
; **** Draw Cars ****
CARMOVE
; LDA CARNUM
; BEQ SPYCARDR ;BRA to SpyCar if CARNUM=0
; LDA #0
; STA CARNUM ;Reset CARNUM to 0
;
; DRAW SWITCH BLADE CAR ******************** NOTE: this is Static test
LDY #$080D
LDD WorkScreen
LEAY D,Y ;Draw on Current Work Screen
LDX #1 ;# OF LINES OF CAR
LDU #SWITCHB ;CAR GRAPHIC LOCATION
LDB #0 ;
! LDA B,U ;LOAD A WITH LEFT SIDE OF CAR
STA ,Y
LEAY $1,Y ;INCR ADDRESS BY $1 (TO RIGHT)
INCB ;NEXT CAR GRAPHIC
LDA B,U ;LOAD A WITH RT SIDE OF CAR
STA ,Y
LEAY $1F,Y ;INCR ADDRESS BY $20 TO NEXT LINE
LEAX 1,X ;NEXT LINE OF CAR
INCB ;NEXT CAR GRAPHIC
CMPX #23
BNE <
; LBRA ENDMOVE ;Skip SpyCar draw - IF alternating between car draws
;
;; DRAW SPY HUNTER CAR 3 ***********************
; CARX - Byte Location of Car (0-32 across Screen)
; CARXG - Current Car Grapic # (0-5)
; CARGRAPH - Current Car Graphic address (start with #SPYCAR30)
; SHOTGRAPH - Current Gun Shot Graphic address (Start with #GUNSHOT0)
; Y - Byte Location of Car
; U - Current Car Graphic Address (0-5) SPYCAR30 + B*$42
;
SPYCARDR
LDY CARX ; Load X Byte location of SpyCar
LDD WorkScreen
LEAY D,Y ; Draw on Current Work Screen
LDX #1 ;# OF LINES OF CAR
LDU CARGRAPH ;Load current Car Graphic Address ($386B + # * $42)
! LDA ,U+ ;LOAD A WITH FIRST CAR GRAPHIC Byte (SPYCAR is 3 bytes wide)
STA ,Y+ ;Store A at Y, add $1
LDA ,U+ ;LOAD A with 2nd Byte of Car
STA ,Y+
LDA ,U+ ;LOAD A with 3rd Byte of Car
STA ,Y
LEAY $1E,Y ;INCR ADDRESS BY $1E(Down 1,Left 3) TO NEXT LINE
LEAX 1,X ;NEXT LINE OF CAR
CMPX #23
BNE <
; LBRA ENDMOVE
; **** Shoot Guns - Draw & Move ****
NOTRIG TST SHOT ; Is Shot Triggered?
BEQ SKGUN ; Skip if NO
LDY CARX ; Load X Byte location of SpyCar
LDD WorkScreen
LEAY D,Y ; Draw on Current Work Screen
LDD GUNLOC ; Load Current Location of GUNSHOT above car
LEAY D,Y ; Store GUNSHOT location above Car Location
;
CMPD #-$D00 ; Compare D to max move up (-$C00 or 12 rows)
BNE > ; if -$C00 skip subraction
LDA #0
STA SHOT ; Reset Shot to 0 (NO)
LDD #-$100
STD GUNLOC ; Reset Location of GUNSHOT above car
BRA SKGUN
! SUBD #$100 ; Move Shot Location up for next move
STD GUNLOC
;
LDX #1 ;# OF LINES OF Shot
LDU SHOTGRAPH ;Load current Shot Graphic Address (#GUNSHOT0 + # * $18)
! LDA ,U+ ;LOAD A with GUNSHOT graphic byte row (Shot is 3 bytes wide)
STA ,Y+ ;Store A at Y, at Current location above car (GUNLOC)
LDA ,U+ ;LOAD A with 2nd Byte of Shot
STA ,Y+
LDA ,U+ ;LOAD A with 3rd Byte of Shot
STA ,Y
LEAY $1E,Y ;INCR ADDRESS BY $1E(Down 1,Left 3) of GUNSHOT graphic
LEAX 1,X ;NEXT LINE OF SHOT
CMPX #8
BNE <
SKGUN ;Skip Gun Shot
; LBRA ENDMOVE
; **** Reduce SPEED Loop ****
;
LDA SPEED ;Road Speed - One Screen Update per Countdown
DECA ;Decr Speed Loop (SPEED)
STA SPEED
BEQ RESETCOUNT
;
; INC CARNUM ;INC to Car #1 (SWITCHB)
lds #StackTop ;reset the stack pointer
LBRA CARLOOP ;LOOP back without Flipping Screen ******
; LBRA CARMOVE ;LOOP back without Flipping Screen ******
;;; BRA SKIPRESET ;Skip Reset Count IF not Looping Back to CARMOVE ???
RESETCOUNT
LDA SPEEDSET :Load current SPEED setpoint (SPEEDSET)
STA SPEED ;Road Speed loop Update
;Drop to SPRAY OIL Check ***
; **** Spray OIL - Draw & Move at Road SPEEDSET ****
;
CHKOIL LDY OILX ; Load X byte location of OIL (from CARX)
CMPY #$FFFF ; IF #$FFFF, Oil#1 not on
BEQ CHKOIL2 ; BRA to Check Oil #2
LDD WorkScreen
LEAY D,Y ; Draw on Current Work Screen
LDD OILLOC ; Load Current Location of OIL below car (Start at +$2C0, 1 car height)
CMPD #$800
BHI RESETOIL
ADDD #$100
STD OILLOC
BRA DRAWOIL
RESETOIL LDD #$2C0-$100 ; Reset OIL starting location
STD OILLOC
LDD #$FFFF
STD OILX
BRA CHKOIL2
DRAWOIL
LEAY D,Y ; Store OIL location below Car Location (Y from OILX, D from OILLOC)
LDX #1 ;# OF LINES OF OIL
LDU SHOTGRAPH ;Load current Shot Graphic Address (#GUNSHOT0 + # * $18)
LEAU $90,U ;Load current Oil Graphic (i.e. +$90 from GUNSHOT)
! LDA ,U+ ;LOAD A with OIL graphic byte row (OIL is 3 bytes wide)
STA ,Y+ ;Store A at Y
LDA ,U+ ;LOAD A with 2nd Byte of Oil
STA ,Y+
LDA ,U+ ;LOAD A with 3rd Byte of Oil
STA ,Y
LEAY $1E,Y ;INCR ADDRESS BY $1E(Down 1,Left 3) of OIL graphic
LEAX 1,X ;NEXT LINE OF OIL
CMPX #8
BNE <
INC SOIL Inc to next Spray Oil #
CHKOIL2 LDY OILX2 ; Load X byte location of OIL (from CARX)
CMPY #$FFFF ; IF #$FFFF, Oil#2 not on
BEQ CHKOIL3 ; BRA to Check Oil #3
LDY OILX2 ; Load X byte location of OIL (from CARX)
LDD WorkScreen
LEAY D,Y ; Draw on Current Work Screen
LDD OILLOC2 ; Load Current Location of OIL below car (Start at +$2C0, 1 car height)
CMPD #$800
BHI RESETOIL2
ADDD #$100
STD OILLOC2
BRA DRAWOIL2
RESETOIL2 LDD #$2C0-$100 ; Reset OIL starting location
STD OILLOC2
LDD #$FFFF
STD OILX2
BRA CHKOIL3
DRAWOIL2
LEAY D,Y ; Store OIL location below Car Location (Y from OILX, D from OILLOC)
LDX #1 ;# OF LINES OF OIL
LDU SHOTGRAPH ;Load current Shot Graphic Address (#GUNSHOT0 + # * $18)
LEAU $90,U ;Load current Oil Graphic (i.e. +$90 from GUNSHOT)
! LDA ,U+ ;LOAD A with OIL graphic byte row (OIL is 3 bytes wide)
STA ,Y+ ;Store A at Y
LDA ,U+ ;LOAD A with 2nd Byte of Oil
STA ,Y+
LDA ,U+ ;LOAD A with 3rd Byte of Oil
STA ,Y
LEAY $1E,Y ;INCR ADDRESS BY $1E(Down 1,Left 3) of OIL graphic
LEAX 1,X ;NEXT LINE OF OIL
CMPX #8
BNE <
INC SOIL Inc to next Spray Oil #
CHKOIL3 LDY OILX3 ; Load X byte location of OIL (from CARX)
CMPY #$FFFF ; IF #$FFFF, Oil#3 not on
BEQ CHKOIL4 ; BRA to Skip Oil
LDY OILX3 ; Load X byte location of OIL (from CARX)
LDD WorkScreen
LEAY D,Y ; Draw on Current Work Screen
LDD OILLOC3 ; Load Current Location of OIL below car (Start at +$2C0, 1 car height)
CMPD #$800
BHI RESETOIL3
ADDD #$100
STD OILLOC3
BRA DRAWOIL3
RESETOIL3 LDD #$2C0-$100 ; Reset OIL starting location
STD OILLOC3
LDD #$FFFF
STD OILX3
BRA CHKOIL4
DRAWOIL3
LEAY D,Y ; Store OIL location below Car Location (Y from OILX, D from OILLOC)
LDX #1 ;# OF LINES OF OIL
LDU SHOTGRAPH ;Load current Shot Graphic Address (#GUNSHOT0 + # * $18)
LEAU $90,U ;Load current Oil Graphic (i.e. +$90 from GUNSHOT)
! LDA ,U+ ;LOAD A with OIL graphic byte row (OIL is 3 bytes wide)
STA ,Y+ ;Store A at Y
LDA ,U+ ;LOAD A with 2nd Byte of Oil
STA ,Y+
LDA ,U+ ;LOAD A with 3rd Byte of Oil
STA ,Y
LEAY $1E,Y ;INCR ADDRESS BY $1E(Down 1,Left 3) of OIL graphic
LEAX 1,X ;NEXT LINE OF OIL
CMPX #8
BNE <
INC SOIL Inc to next Spray Oil #
CHKOIL4 LDY OILX4 ; Load X byte location of OIL (from CARX)
CMPY #$FFFF ; IF #$FFFF, Oil#3 not on
BEQ CHKOIL5 ; BRA to Skip Oil
LDY OILX4 ; Load X byte location of OIL (from CARX)
LDD WorkScreen
LEAY D,Y ; Draw on Current Work Screen
LDD OILLOC4 ; Load Current Location of OIL below car (Start at +$2C0, 1 car height)
CMPD #$800
BHI RESETOIL4
ADDD #$100
STD OILLOC4
BRA DRAWOIL4
RESETOIL4 LDD #$2C0-$100 ; Reset OIL starting location
STD OILLOC4
LDD #$FFFF
STD OILX4
BRA CHKOIL5
DRAWOIL4
LEAY D,Y ; Store OIL location below Car Location (Y from OILX, D from OILLOC)
LDX #1 ;# OF LINES OF OIL
LDU SHOTGRAPH ;Load current Shot Graphic Address (#GUNSHOT0 + # * $18)
LEAU $90,U ;Load current Oil Graphic (i.e. +$90 from GUNSHOT)
! LDA ,U+ ;LOAD A with OIL graphic byte row (OIL is 3 bytes wide)
STA ,Y+ ;Store A at Y
LDA ,U+ ;LOAD A with 2nd Byte of Oil
STA ,Y+
LDA ,U+ ;LOAD A with 3rd Byte of Oil
STA ,Y
LEAY $1E,Y ;INCR ADDRESS BY $1E(Down 1,Left 3) of OIL graphic
LEAX 1,X ;NEXT LINE OF OIL
CMPX #8
BNE <
INC SOIL Inc to next Spray Oil #
CHKOIL5 LDY OILX5 ; Load X byte location of OIL (from CARX)
CMPY #$FFFF ; IF #$FFFF, Oil#3 not on
BEQ CHKOIL6 ; BRA to Skip Oil
LDY OILX5 ; Load X byte location of OIL (from CARX)
LDD WorkScreen
LEAY D,Y ; Draw on Current Work Screen
LDD OILLOC5 ; Load Current Location of OIL below car (Start at +$2C0, 1 car height)
CMPD #$800
BHI RESETOIL5
ADDD #$100
STD OILLOC5
BRA DRAWOIL5
RESETOIL5 LDD #$2C0-$100 ; Reset OIL starting location
STD OILLOC5
LDD #$FFFF
STD OILX5
BRA CHKOIL6
DRAWOIL5
LEAY D,Y ; Store OIL location below Car Location (Y from OILX, D from OILLOC)
LDX #1 ;# OF LINES OF OIL
LDU SHOTGRAPH ;Load current Shot Graphic Address (#GUNSHOT0 + # * $18)
LEAU $90,U ;Load current Oil Graphic (i.e. +$90 from GUNSHOT)
! LDA ,U+ ;LOAD A with OIL graphic byte row (OIL is 3 bytes wide)
STA ,Y+ ;Store A at Y
LDA ,U+ ;LOAD A with 2nd Byte of Oil
STA ,Y+
LDA ,U+ ;LOAD A with 3rd Byte of Oil
STA ,Y
LEAY $1E,Y ;INCR ADDRESS BY $1E(Down 1,Left 3) of OIL graphic
LEAX 1,X ;NEXT LINE OF OIL
CMPX #8
BNE <
INC SOIL Inc to next Spray Oil #
CHKOIL6 LDY OILX6 ; Load X byte location of OIL (from CARX)
CMPY #$FFFF ; IF #$FFFF, Oil#3 not on
BEQ CHKOIL7 ; BRA to Skip Oil
LDY OILX6 ; Load X byte location of OIL (from CARX)
LDD WorkScreen
LEAY D,Y ; Draw on Current Work Screen
LDD OILLOC6 ; Load Current Location of OIL below car (Start at +$2C0, 1 car height)
CMPD #$800
BHI RESETOIL6
ADDD #$100
STD OILLOC6
BRA DRAWOIL6
RESETOIL6 LDD #$2C0-$100 ; Reset OIL starting location
STD OILLOC6
LDD #$FFFF
STD OILX6
BRA CHKOIL7
DRAWOIL6
LEAY D,Y ; Store OIL location below Car Location (Y from OILX, D from OILLOC)
LDX #1 ;# OF LINES OF OIL
LDU SHOTGRAPH ;Load current Shot Graphic Address (#GUNSHOT0 + # * $18)
LEAU $90,U ;Load current Oil Graphic (i.e. +$90 from GUNSHOT)
! LDA ,U+ ;LOAD A with OIL graphic byte row (OIL is 3 bytes wide)
STA ,Y+ ;Store A at Y
LDA ,U+ ;LOAD A with 2nd Byte of Oil
STA ,Y+
LDA ,U+ ;LOAD A with 3rd Byte of Oil
STA ,Y
LEAY $1E,Y ;INCR ADDRESS BY $1E(Down 1,Left 3) of OIL graphic
LEAX 1,X ;NEXT LINE OF OIL
CMPX #8
BNE <
INC SOIL Inc to next Spray Oil #
CHKOIL7 LDY OILX7 ; Load X byte location of OIL (from CARX)
CMPY #$FFFF ; IF #$FFFF, Oil#3 not on
BEQ CHKOIL8 ; BRA to Skip Oil
LDY OILX7 ; Load X byte location of OIL (from CARX)
LDD WorkScreen
LEAY D,Y ; Draw on Current Work Screen
LDD OILLOC7 ; Load Current Location of OIL below car (Start at +$2C0, 1 car height)
CMPD #$800
BHI RESETOIL7
ADDD #$100
STD OILLOC7
BRA DRAWOIL7
RESETOIL7 LDD #$2C0-$100 ; Reset OIL starting location
STD OILLOC7
LDD #$FFFF
STD OILX7
BRA CHKOIL8
DRAWOIL7
LEAY D,Y ; Store OIL location below Car Location (Y from OILX, D from OILLOC)
LDX #1 ;# OF LINES OF OIL
LDU SHOTGRAPH ;Load current Shot Graphic Address (#GUNSHOT0 + # * $18)
LEAU $90,U ;Load current Oil Graphic (i.e. +$90 from GUNSHOT)
! LDA ,U+ ;LOAD A with OIL graphic byte row (OIL is 3 bytes wide)
STA ,Y+ ;Store A at Y
LDA ,U+ ;LOAD A with 2nd Byte of Oil
STA ,Y+
LDA ,U+ ;LOAD A with 3rd Byte of Oil
STA ,Y
LEAY $1E,Y ;INCR ADDRESS BY $1E(Down 1,Left 3) of OIL graphic
LEAX 1,X ;NEXT LINE OF OIL
CMPX #8
BNE <
INC SOIL Inc to next Spray Oil #
CHKOIL8 LDY OILX8 ; Load X byte location of OIL (from CARX)
CMPY #$FFFF ; IF #$FFFF, Oil#3 not on
BEQ SKOIL ; BRA to Skip Oil
LDY OILX8 ; Load X byte location of OIL (from CARX)
LDD WorkScreen
LEAY D,Y ; Draw on Current Work Screen
LDD OILLOC8 ; Load Current Location of OIL below car (Start at +$2C0, 1 car height)
CMPD #$800
BHI RESETOIL8
ADDD #$100
STD OILLOC8
BRA DRAWOIL8
RESETOIL8 LDD #$2C0-$100 ; Reset OIL starting location
STD OILLOC8
LDD #$FFFF
STD OILX8
; LDA #0
; STA OTRIG ; Shut off Oil Trig
BRA SKOIL
DRAWOIL8
LEAY D,Y ; Store OIL location below Car Location (Y from OILX, D from OILLOC)
LDX #1 ;# OF LINES OF OIL
LDU SHOTGRAPH ;Load current Shot Graphic Address (#GUNSHOT0 + # * $18)
LEAU $90,U ;Load current Oil Graphic (i.e. +$90 from GUNSHOT)
! LDA ,U+ ;LOAD A with OIL graphic byte row (OIL is 3 bytes wide)
STA ,Y+ ;Store A at Y
LDA ,U+ ;LOAD A with 2nd Byte of Oil
STA ,Y+
LDA ,U+ ;LOAD A with 3rd Byte of Oil
STA ,Y
LEAY $1E,Y ;INCR ADDRESS BY $1E(Down 1,Left 3) of OIL graphic
LEAX 1,X ;NEXT LINE OF OIL
CMPX #8
BNE <
INC SOIL
; LDA #1
; STA SOIL ; Go back to Spray Oil #1
SKOIL
; **** FLIP and Draw Screens and Main Loop ****
SKIPRESET LDA SCPOINT ;What Screen are we pointing to?
CMPA #1 ;Screen #1?
BEQ S2 ;Yes - then POINT to Screen #2
;
LDA #1 ;Else, POINT TO SCREEN #1
STA SCPOINT ;Store Pointer
STA $FFCA ;CLEAR $800
STA $FFCC ;CLEAR $1000
STA $FFC9 ;TURN ON $400
BRA DRSCR ;Bra to Check Draw Screen
S2 LDA #2 ;POINT TO SCREEN #2
STA SCPOINT ;Store Pointer
STA $FFC9 ;TURN ON $400
STA $FFCB ;TURN ON $800
STA $FFCD ;TURN ON $1000
DRSCR ; Draw on Current Screen
LDX WorkScreen ;What Screen are we DRAWING on? $0=First, $1800=Second
CMPX #$1800
BEQ SCONEDRAW ;If on Screen 2, Switch to Screen 1 to Draw
LDX #$1800
STX WorkScreen ;Else, Switch to Screen 2 to Draw
;
lds #StackTop ;reset the stack pointer
LBRA NEXTSCRN ; MAIN Program loop back
SCONEDRAW LDX #$0000
STX WorkScreen
;
lds #StackTop ;reset the stack pointer
LBRA NEXTSCRN ; MAIN Program loop back
End START ;no more code and set the start location
;##########################################################################################
;##########################################################################################