mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-10-24 23:25:28 +00:00
a8ab24004d
need to change a bunch to make this work Now load at $4000 as was too big to fit between $1000 and $2000 also turns out our lz4 code was writing past the end, which you notice when you have important code right after the end of HGR1
224 lines
4.4 KiB
ArmAsm
224 lines
4.4 KiB
ArmAsm
;===============================================
|
|
; Move Letters
|
|
;===============================================
|
|
; Normal P0 =6+13+2+22+46+37 = 126
|
|
; Normal P1 =6+13+2+22+46+37 = 126
|
|
; End of line =6+13+2+22+46+9+(28) = 126
|
|
; Next line =6+13+5+14+34+(26+28) = 126
|
|
; done entirely =6+13+5+(6+42+26+28) = 126
|
|
; Waiting =6+7+(11+6+42+26+28) = 126
|
|
|
|
; all forced to be 126
|
|
|
|
move_letters:
|
|
ldy WAITING ; 3
|
|
beq not_waiting ; 3
|
|
;============
|
|
; 6
|
|
|
|
;-1
|
|
dec WAITING ; 5
|
|
jmp wait_it_out ; 3
|
|
;===========
|
|
; 7
|
|
|
|
not_waiting:
|
|
; load letter from pointer, save into LETTER
|
|
|
|
ldy #0 ; 2
|
|
lda (LETTERL),Y ; 5
|
|
sta LETTER ; 3
|
|
|
|
; if high bit set, is special case
|
|
bmi letter_special ; 3
|
|
;==========
|
|
; 13
|
|
|
|
; just regular letter
|
|
|
|
;-1
|
|
lda LETTERY ; get letter Y ; 3
|
|
bmi letter_page1
|
|
;==========
|
|
; 2
|
|
|
|
letter_page0: ; -1
|
|
asl ; map to memory address ; 2
|
|
tay ; 2
|
|
lda gr_offsets,Y ; lookup low-res memory address ; 4
|
|
sta BASL ; store out low byte of addy ; 3
|
|
lda gr_offsets+1,Y ; look up high byte ; 4
|
|
sta BASH ; 3
|
|
lda #0 ; cycle-killer ; 2
|
|
jmp letter_erase ; 3
|
|
;==========
|
|
; 22
|
|
|
|
letter_page1:
|
|
asl ; map to memory address ; 2
|
|
tay ; 2
|
|
lda gr_offsets,Y ; lookup low-res memory address ; 4
|
|
sta BASL ; store out low byte of addy ; 3
|
|
lda gr_offsets+1,Y ; look up high byte ; 4
|
|
clc ; 2
|
|
adc #$4 ; adjust to page1 ; 2
|
|
sta BASH ; 3
|
|
;==========
|
|
; 22
|
|
|
|
;============================
|
|
letter_erase:
|
|
ldy LETTERX ; nop ; 3
|
|
nop ; nop ; 5
|
|
|
|
ldy #0 ; erase old char with space ; 2
|
|
lda #' '|$80 ; 2
|
|
ldy LETTERX ; 3
|
|
sta (BASL),Y ; 6
|
|
|
|
dey ; draw new char ; 2
|
|
sty LETTERX ; 3
|
|
lda LETTER ; 3
|
|
ora #$80 ; 2
|
|
ldy LETTERX ; 3
|
|
sta (BASL),Y ; 6
|
|
|
|
lda LETTERX ; see if we are at destination ; 3
|
|
cmp LETTERD ; 3
|
|
beq letter_next ; 3
|
|
;===========
|
|
; 46
|
|
|
|
;-1
|
|
lda #0 ; 2
|
|
lda #0 ; 2
|
|
jmp waste_28 ; 3
|
|
;==========
|
|
; 9
|
|
letter_next:
|
|
clc ; 16-bit inc letter pointer ; 2
|
|
lda LETTERL ; 3
|
|
adc #1 ; 2
|
|
sta LETTERL ; 3
|
|
lda LETTERH ; 3
|
|
adc #0 ; 2
|
|
sta LETTERH ; 3
|
|
|
|
inc LETTERD ; inc destination X ; 5
|
|
lda #39 ; start at right of screen ; 2
|
|
sta LETTERX ; 3
|
|
rts ; 6
|
|
;===========
|
|
; 37
|
|
|
|
letter_special:
|
|
cmp #$ff ; handle FF, we're done ; 2
|
|
beq letter_done ; 3
|
|
;==========
|
|
; 5
|
|
|
|
|
|
; -1
|
|
and #$7f ; clear top ; 2
|
|
sta WAITING ; this is waiting value ; 3
|
|
|
|
ldy #1 ; otherwise, Y,X pair ; 2
|
|
lda (LETTERL),Y ; get Y, put in LETTERY ; 5
|
|
sta LETTERY ; 3
|
|
;===========
|
|
; 14
|
|
|
|
iny ; get dest ; 2
|
|
lda (LETTERL),Y ; 5
|
|
sta LETTERD ; put in LETTERD ; 3
|
|
|
|
clc ; skip 3 bytes to begin of letters ; 2
|
|
lda LETTERL ; 16-bit add ; 3
|
|
adc #3 ; 2
|
|
sta LETTERL ; 3
|
|
lda LETTERH ; 3
|
|
adc #0 ; 2
|
|
sta LETTERH ; 3
|
|
lda LETTERH ; waste ; 3
|
|
jmp waste_26 ; 3
|
|
|
|
;===========
|
|
; 34
|
|
|
|
wait_it_out:
|
|
; wait 11
|
|
inc BLARGH ; 5
|
|
lda LETTERH ; 3
|
|
lda LETTERH ; 3
|
|
|
|
letter_done:
|
|
lda LETTERH ; 3
|
|
lda LETTERH ; 3
|
|
|
|
waste_42:
|
|
ldx #0 ; 2
|
|
inc BLARGH ; 5
|
|
inc BLARGH ; 5
|
|
inc BLARGH ; 5
|
|
inc BLARGH ; 5
|
|
inc BLARGH ; 5
|
|
inc BLARGH ; 5
|
|
inc BLARGH ; 5
|
|
inc BLARGH ; 5
|
|
waste_26:
|
|
ldx #0 ; 2
|
|
ldx #0 ; 2
|
|
ldx #0 ; 2
|
|
inc BLARGH ; 5
|
|
inc BLARGH ; 5
|
|
inc BLARGH ; 5
|
|
inc BLARGH ; 5
|
|
|
|
waste_28:
|
|
ldx #0 ; 2
|
|
inc BLARGH ; 5
|
|
inc BLARGH ; 5
|
|
inc BLARGH ; 5
|
|
inc BLARGH ; 5
|
|
rts ; 6
|
|
|
|
letters:
|
|
; .byte 22,28,
|
|
.byte " ",128
|
|
.byte 22+128,25," ",128
|
|
|
|
.byte 23,25, " ",128
|
|
.byte 23+128,25," ",128
|
|
|
|
.byte 22,26, "CODE BY",128
|
|
.byte 22+128,26,"CODE BY",128
|
|
|
|
.byte 23,26, "DEATER",128
|
|
.byte 23+128,26,"DEATER",198
|
|
|
|
.byte 22,26, " ",128
|
|
.byte 22+128,26," ",128
|
|
|
|
.byte 23,26, " ",128
|
|
.byte 23+128,26," ",128
|
|
|
|
.byte 22,26, "FIREWORKS",128
|
|
.byte 22+128,26,"FIREWORKS",128
|
|
|
|
.byte 23,26, "FOZZTEXX",128
|
|
.byte 23+128,26,"FOZZTEXX",198
|
|
|
|
.byte 22,26, " ",128
|
|
.byte 22+128,26," ",128
|
|
|
|
.byte 23,26, " ",128
|
|
.byte 23+128,26," ",128
|
|
|
|
.byte 22,26,"A VMW",128
|
|
.byte 22+128,26,"A VMW",128
|
|
|
|
.byte 23,26,"PRODUCTION",128
|
|
.byte 23+128,26,"PRODUCTION"
|
|
|
|
.byte 255
|