mirror of
https://github.com/robmcmullen/asmgen.git
synced 2024-10-03 23:54:50 +00:00
496 lines
7.8 KiB
ArmAsm
496 lines
7.8 KiB
ArmAsm
;
|
|
; hgrtest.s
|
|
;
|
|
; Created by Quinn Dunki on 7/19/16
|
|
; Copyright (c) 2015 One Girl, One Laptop Productions. All rights reserved.
|
|
;
|
|
|
|
|
|
.org $6000
|
|
|
|
.include "macros.s"
|
|
|
|
; Softswitches
|
|
TEXT = $c050
|
|
HIRES1 = $c057
|
|
HIRES2 = $c058
|
|
|
|
|
|
; ROM entry points
|
|
COUT = $fded
|
|
ROMWAIT = $fca8
|
|
|
|
; Zero page locations we use (unused by Monitor, Applesoft, or ProDOS)
|
|
PARAM0 = $06
|
|
PARAM1 = $07
|
|
PARAM2 = $08
|
|
PARAM3 = $09
|
|
SCRATCH0 = $19
|
|
SCRATCH1 = $1a
|
|
|
|
; Macros
|
|
.macro BLITBYTE xPos,yPos,addr
|
|
lda #xPos
|
|
sta PARAM0
|
|
lda #yPos
|
|
sta PARAM1
|
|
lda #<addr
|
|
sta PARAM2
|
|
lda #>addr
|
|
sta PARAM3
|
|
jsr BlitSpriteOnByte
|
|
.endmacro
|
|
|
|
.macro BLIT xPos,yPos,addr
|
|
lda #xPos
|
|
sta PARAM0
|
|
lda #yPos
|
|
sta PARAM1
|
|
lda #<addr
|
|
sta PARAM2
|
|
lda #>addr
|
|
sta PARAM3
|
|
jsr BlitSprite
|
|
.endmacro
|
|
|
|
|
|
.macro WAIT
|
|
lda #$80
|
|
jsr $fca8
|
|
.endmacro
|
|
|
|
|
|
|
|
main:
|
|
jsr EnableHires
|
|
|
|
lda #$00
|
|
jsr LinearFill
|
|
|
|
.if 1
|
|
|
|
ldx #0
|
|
loop:
|
|
txa
|
|
asl
|
|
asl
|
|
sta PARAM0
|
|
lda #80
|
|
sta PARAM1
|
|
lda #<BOX_MAG_SHIFT0
|
|
sta PARAM2
|
|
lda #>BOX_MAG_SHIFT0
|
|
sta PARAM3
|
|
jsr BlitSprite
|
|
|
|
lda #88
|
|
sta PARAM1
|
|
lda #<BOX_GRN_SHIFT0
|
|
sta PARAM2
|
|
lda #>BOX_GRN_SHIFT0
|
|
sta PARAM3
|
|
jsr BlitSprite
|
|
|
|
lda #96
|
|
sta PARAM1
|
|
lda #<BOX_BLU_SHIFT0
|
|
sta PARAM2
|
|
lda #>BOX_BLU_SHIFT0
|
|
sta PARAM3
|
|
jsr BlitSprite
|
|
|
|
lda #104
|
|
sta PARAM1
|
|
lda #<BOX_ORG_SHIFT0
|
|
sta PARAM2
|
|
lda #>BOX_ORG_SHIFT0
|
|
sta PARAM3
|
|
jsr BlitSprite
|
|
|
|
; lda #$ff
|
|
; jsr ROMWAIT
|
|
|
|
inx
|
|
cpx #35
|
|
bne loop
|
|
|
|
.endif
|
|
.if 0
|
|
BLITBYTE 0,80,BOX_MAG_SHIFT0_CHUNK0
|
|
BLITBYTE 1,80,BOX_MAG_SHIFT0_CHUNK1
|
|
BLITBYTE 2,80,BOX_MAG_SHIFT0_CHUNK2
|
|
|
|
BLITBYTE 0,90,BOX_MAG_SHIFT1_CHUNK0
|
|
BLITBYTE 1,90,BOX_MAG_SHIFT1_CHUNK1
|
|
BLITBYTE 2,90,BOX_MAG_SHIFT1_CHUNK2
|
|
|
|
BLITBYTE 0,100,BOX_MAG_SHIFT2_CHUNK0
|
|
BLITBYTE 1,100,BOX_MAG_SHIFT2_CHUNK1
|
|
BLITBYTE 2,100,BOX_MAG_SHIFT2_CHUNK2
|
|
|
|
BLITBYTE 0,110,BOX_MAG_SHIFT3_CHUNK0
|
|
BLITBYTE 1,110,BOX_MAG_SHIFT3_CHUNK1
|
|
BLITBYTE 2,110,BOX_MAG_SHIFT3_CHUNK2
|
|
|
|
BLITBYTE 0,120,BOX_MAG_SHIFT4_CHUNK0
|
|
BLITBYTE 1,120,BOX_MAG_SHIFT4_CHUNK1
|
|
BLITBYTE 2,120,BOX_MAG_SHIFT4_CHUNK2
|
|
|
|
BLITBYTE 0,130,BOX_MAG_SHIFT5_CHUNK0
|
|
BLITBYTE 1,130,BOX_MAG_SHIFT5_CHUNK1
|
|
BLITBYTE 2,130,BOX_MAG_SHIFT5_CHUNK2
|
|
|
|
BLITBYTE 0,140,BOX_MAG_SHIFT6_CHUNK0
|
|
BLITBYTE 1,140,BOX_MAG_SHIFT6_CHUNK1
|
|
BLITBYTE 2,140,BOX_MAG_SHIFT6_CHUNK2
|
|
|
|
|
|
|
|
|
|
BLITBYTE 4,80,BOX_GRN_SHIFT0_CHUNK0
|
|
BLITBYTE 5,80,BOX_GRN_SHIFT0_CHUNK1
|
|
BLITBYTE 6,80,BOX_GRN_SHIFT0_CHUNK2
|
|
|
|
BLITBYTE 4,90,BOX_GRN_SHIFT1_CHUNK0
|
|
BLITBYTE 5,90,BOX_GRN_SHIFT1_CHUNK1
|
|
BLITBYTE 6,90,BOX_GRN_SHIFT1_CHUNK2
|
|
|
|
BLITBYTE 4,100,BOX_GRN_SHIFT2_CHUNK0
|
|
BLITBYTE 5,100,BOX_GRN_SHIFT2_CHUNK1
|
|
BLITBYTE 6,100,BOX_GRN_SHIFT2_CHUNK2
|
|
|
|
BLITBYTE 4,110,BOX_GRN_SHIFT3_CHUNK0
|
|
BLITBYTE 5,110,BOX_GRN_SHIFT3_CHUNK1
|
|
BLITBYTE 6,110,BOX_GRN_SHIFT3_CHUNK2
|
|
|
|
BLITBYTE 4,120,BOX_GRN_SHIFT4_CHUNK0
|
|
BLITBYTE 5,120,BOX_GRN_SHIFT4_CHUNK1
|
|
BLITBYTE 6,120,BOX_GRN_SHIFT4_CHUNK2
|
|
|
|
BLITBYTE 4,130,BOX_GRN_SHIFT5_CHUNK0
|
|
BLITBYTE 5,130,BOX_GRN_SHIFT5_CHUNK1
|
|
BLITBYTE 6,130,BOX_GRN_SHIFT5_CHUNK2
|
|
|
|
BLITBYTE 4,140,BOX_GRN_SHIFT6_CHUNK0
|
|
BLITBYTE 5,140,BOX_GRN_SHIFT6_CHUNK1
|
|
BLITBYTE 6,140,BOX_GRN_SHIFT6_CHUNK2
|
|
|
|
.endif
|
|
|
|
|
|
.if 0
|
|
BLITBYTE 20,80,MAG0
|
|
BLITBYTE 21,80,MAG1
|
|
|
|
BLITBYTE 20,90,MAG2
|
|
BLITBYTE 21,90,MAG3
|
|
|
|
BLITBYTE 20,100,MAG4
|
|
BLITBYTE 21,100,MAG5
|
|
|
|
BLITBYTE 20,110,MAG6
|
|
BLITBYTE 21,110,MAG7
|
|
|
|
BLITBYTE 21,120,MAG8
|
|
BLITBYTE 22,120,MAG9
|
|
|
|
BLITBYTE 21,130,MAG10
|
|
BLITBYTE 22,130,MAG11
|
|
|
|
BLITBYTE 21,140,MAG12
|
|
BLITBYTE 22,140,MAG13
|
|
.endif
|
|
|
|
.if 0
|
|
|
|
BLITBYTE 22,80,GRN0
|
|
BLITBYTE 23,80,GRN1
|
|
|
|
BLITBYTE 22,90,GRN2
|
|
BLITBYTE 23,90,GRN3
|
|
|
|
BLITBYTE 22,100,GRN4
|
|
BLITBYTE 23,100,GRN5
|
|
|
|
BLITBYTE 22,110,GRN6
|
|
BLITBYTE 23,110,GRN7
|
|
|
|
BLITBYTE 23,120,GRN8
|
|
BLITBYTE 24,120,GRN9
|
|
|
|
BLITBYTE 23,130,GRN10
|
|
BLITBYTE 24,130,GRN11
|
|
|
|
BLITBYTE 23,140,GRN12
|
|
BLITBYTE 24,140,GRN13
|
|
.endif
|
|
|
|
|
|
.if 0
|
|
BLITBYTE 20,80,BOX_MAG0
|
|
BLITBYTE 21,80,BOX_MAG1
|
|
|
|
BLITBYTE 20,90,BOX_MAG2
|
|
BLITBYTE 21,90,BOX_MAG3
|
|
|
|
BLITBYTE 20,100,BOX_MAG4
|
|
BLITBYTE 21,100,BOX_MAG5
|
|
|
|
BLITBYTE 20,110,BOX_MAG6
|
|
BLITBYTE 21,110,BOX_MAG7
|
|
|
|
BLITBYTE 21,120,BOX_MAG8
|
|
BLITBYTE 22,120,BOX_MAG9
|
|
|
|
BLITBYTE 21,130,BOX_MAG10
|
|
BLITBYTE 22,130,BOX_MAG11
|
|
|
|
BLITBYTE 21,140,BOX_MAG12
|
|
BLITBYTE 22,140,BOX_MAG13
|
|
.endif
|
|
|
|
.if 0
|
|
BLITBYTE 20,80,BOX_GRN0
|
|
|
|
BLITBYTE 20,90,BOX_GRN1
|
|
BLITBYTE 21,90,BOX_GRN2
|
|
|
|
BLITBYTE 20,100,BOX_GRN3
|
|
BLITBYTE 21,100,BOX_GRN4
|
|
|
|
BLITBYTE 20,110,BOX_GRN5
|
|
BLITBYTE 21,110,BOX_GRN6
|
|
|
|
BLITBYTE 21,120,BOX_GRN7
|
|
BLITBYTE 22,120,BOX_GRN8
|
|
|
|
BLITBYTE 21,130,BOX_GRN9
|
|
BLITBYTE 22,130,BOX_GRN10
|
|
|
|
BLITBYTE 21,140,BOX_GRN11
|
|
BLITBYTE 22,140,BOX_GRN12
|
|
.endif
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
.if 0
|
|
BLITBYTE 20,80,BOX0
|
|
WAIT
|
|
BLITBYTE 20,80,BLACK
|
|
|
|
BLITBYTE 20,80,BOX1
|
|
BLITBYTE 21,80,BOX2
|
|
WAIT
|
|
BLITBYTE 20,80,BLACK
|
|
BLITBYTE 21,80,BLACK
|
|
|
|
BLITBYTE 20,80,BOX3
|
|
BLITBYTE 21,80,BOX4
|
|
WAIT
|
|
BLITBYTE 20,80,BLACK
|
|
BLITBYTE 21,80,BLACK
|
|
|
|
BLITBYTE 20,80,BOX5
|
|
BLITBYTE 21,80,BOX6
|
|
WAIT
|
|
BLITBYTE 20,80,BLACK
|
|
BLITBYTE 21,80,BLACK
|
|
|
|
BLITBYTE 21,80,BOX7
|
|
BLITBYTE 22,80,BOX8
|
|
WAIT
|
|
BLITBYTE 21,80,BLACK
|
|
BLITBYTE 22,80,BLACK
|
|
|
|
BLITBYTE 21,80,BOX9
|
|
BLITBYTE 22,80,BOX10
|
|
WAIT
|
|
BLITBYTE 21,80,BLACK
|
|
BLITBYTE 22,80,BLACK
|
|
|
|
BLITBYTE 21,80,BOX11
|
|
BLITBYTE 22,80,BOX12
|
|
WAIT
|
|
BLITBYTE 21,80,BLACK
|
|
BLITBYTE 22,80,BLACK
|
|
|
|
BLITBYTE 22,80,BOX0
|
|
WAIT
|
|
BLITBYTE 22,80,BLACK
|
|
|
|
jmp loop
|
|
.endif
|
|
|
|
|
|
rts
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; BlitSprite
|
|
; Trashes everything, including parameters
|
|
; PARAM0: X Pos
|
|
; PARAM1: Y Pos
|
|
; PARAM2: Sprite Ptr LSB
|
|
; PARAM3: Sprite Ptr MSB
|
|
;
|
|
BlitSprite:
|
|
SAVE_AXY
|
|
|
|
clc ; Compute sprite data base
|
|
ldx PARAM0
|
|
lda HGRROWS_BITSHIFT_GRN,x
|
|
adc PARAM2
|
|
sta PARAM2
|
|
lda #0
|
|
adc PARAM3
|
|
sta PARAM3
|
|
|
|
lda #7
|
|
sta SCRATCH0 ; Tracks row index
|
|
|
|
asl ; Multiply by byte width
|
|
asl
|
|
sta SCRATCH1 ; Tracks total bytes
|
|
ldy #0
|
|
|
|
blitSprite_Yloop:
|
|
clc ; Calculate Y line on screen
|
|
lda SCRATCH0
|
|
adc PARAM1
|
|
tax
|
|
|
|
lda HGRROWS_H,x ; Compute hires row
|
|
sta blitSprite_smc+2 ; Self-modifying code
|
|
sta blitSprite_smc+5
|
|
lda HGRROWS_L,x
|
|
sta blitSprite_smc+1
|
|
sta blitSprite_smc+4
|
|
|
|
ldx PARAM0 ; Compute hires horizontal byte
|
|
lda HGRROWS_GRN,x
|
|
tax
|
|
|
|
blitSprite_Xloop:
|
|
lda (PARAM2),y
|
|
|
|
blitSprite_smc:
|
|
ora $2000,x
|
|
sta $2000,x
|
|
inx
|
|
iny
|
|
tya ; End of row?
|
|
and #$03 ; If last two bits are zero, we've wrapped a row
|
|
bne blitSprite_Xloop
|
|
|
|
dec SCRATCH0
|
|
bpl blitSprite_Yloop
|
|
|
|
RESTORE_AXY
|
|
rts
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; BlitSpriteOnByte
|
|
; Trashes everything
|
|
; PARAM0: X Byte
|
|
; PARAM1: Y Pos
|
|
; PARAM2: Sprite Ptr MSB
|
|
; PARAM3: Sprite Ptr LSB
|
|
;
|
|
BlitSpriteOnByte:
|
|
ldy #7
|
|
|
|
blitSpriteOnByte_loop:
|
|
clc
|
|
tya
|
|
adc PARAM1 ; Calculate Y line
|
|
tax
|
|
|
|
lda HGRROWS_H,x ; Compute hires row
|
|
sta blitSpriteOnByte_smc+2
|
|
lda HGRROWS_L,x
|
|
sta blitSpriteOnByte_smc+1
|
|
|
|
ldx PARAM0 ; Compute hires column
|
|
lda (PARAM2),y
|
|
|
|
blitSpriteOnByte_smc:
|
|
sta $2000,x
|
|
dey
|
|
bpl blitSpriteOnByte_loop
|
|
rts
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; EnableHires
|
|
; Trashes A
|
|
;
|
|
EnableHires:
|
|
lda TEXT
|
|
lda HIRES1
|
|
lda HIRES2
|
|
rts
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; LinearFill
|
|
; A: Byte value to fill
|
|
; Trashes all registers
|
|
;
|
|
LinearFill:
|
|
ldx #0
|
|
|
|
linearFill_outer:
|
|
pha
|
|
lda HGRROWS_H,x
|
|
sta linearFill_inner+2
|
|
lda HGRROWS_L,x
|
|
sta linearFill_inner+1
|
|
pla
|
|
|
|
ldy #39
|
|
linearFill_inner:
|
|
sta $2000,y
|
|
dey
|
|
bpl linearFill_inner
|
|
|
|
inx
|
|
cpx #192
|
|
bne linearFill_outer
|
|
rts
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; VenetianFill
|
|
; A: Byte value to fill
|
|
; Trashes all registers
|
|
;
|
|
VenetianFill:
|
|
ldx #$3f
|
|
venetianFill_outer:
|
|
stx venetianFill_inner+2
|
|
ldy #$00
|
|
venetianFill_inner:
|
|
sta $2000,y ; Upper byte of address is self-modified
|
|
iny
|
|
bne venetianFill_inner
|
|
dex
|
|
cpx #$1f
|
|
bne venetianFill_outer
|
|
rts
|
|
|
|
|
|
.include "hgrtable.s"
|
|
.include "hgrtable2.s"
|
|
.include "spritedata0.s"
|
|
.include "spritedata1.s"
|
|
.include "spritegen0.s"
|
|
.include "spritegen1.s"
|
|
.include "spritegen2.s"
|
|
.include "spritegen3.s"
|
|
|
|
|
|
; Suppress some linker warnings - Must be the last thing in the file
|
|
.SEGMENT "ZPSAVE"
|
|
.SEGMENT "EXEHDR"
|
|
.SEGMENT "STARTUP"
|
|
.SEGMENT "INIT"
|
|
.SEGMENT "LOWCODE"
|