diff --git a/still_alive/GLADOS.HGR b/still_alive/GLADOS.HGR new file mode 100644 index 00000000..d5906f76 Binary files /dev/null and b/still_alive/GLADOS.HGR differ diff --git a/still_alive/Makefile b/still_alive/Makefile index 24e8022e..e57da80a 100644 --- a/still_alive/Makefile +++ b/still_alive/Makefile @@ -5,8 +5,9 @@ TOKENIZE = ../asoft_basic-utils/tokenize_asoft all: still_alive.dsk -still_alive.dsk: STILL_ALIVE TITLE.BAS +still_alive.dsk: STILL_ALIVE TITLE.BAS ENDING $(DOS33) -y still_alive.dsk BSAVE -a 0x0C00 STILL_ALIVE + $(DOS33) -y still_alive.dsk BSAVE -a 0x4000 ENDING $(DOS33) -y still_alive.dsk SAVE A TITLE.BAS @@ -21,6 +22,13 @@ still_alive.o: still_alive.s \ ascii_art.inc ascii_art_lz4.inc lyrics.inc zp.inc ca65 -o still_alive.o still_alive.s -l still_alive.lst +ENDING: ending.o + ld65 -o ENDING ending.o -C ../linker_scripts/apple2_4000.inc + +ending.o: ending.s \ + GLADOS.HGR + ca65 -o ending.o ending.s -l ending.lst + TITLE.BAS: title.bas $(TOKENIZE) < title.bas> TITLE.BAS diff --git a/still_alive/README.still_alive b/still_alive/README.still_alive index 481c5e44..bf65d4e1 100644 --- a/still_alive/README.still_alive +++ b/still_alive/README.still_alive @@ -39,7 +39,25 @@ strip out some unneeded text printing: 19962 Memory Map -Lowmem: 4k -Code: 20k (8k=audio, 5k=lyrics, 3k=art) -Sound buffers: 14k + +0000: Zero Page +0100: Stack +0400: Text Page 0 (AUX 0400: 80 column text) + +2000: HGR Page0 +4000: HGP Page1 +9600: DOS 37.5k +C000: I/O Space +D000: ROM +FFFF: END + + +Code: c00 - 8c00 32k + (8k=audio, 5k=lyrics, 3k=art) +Sound buffers: 5e00-9600 = 14k + +Plan: + 16k compressed Load at 32k? 8000 + 20k decompressed Decompress from 0c00 - 6000 or so + diff --git a/still_alive/ending.s b/still_alive/ending.s new file mode 100644 index 00000000..d579adb0 --- /dev/null +++ b/still_alive/ending.s @@ -0,0 +1,156 @@ +.include "zp.inc" + + ;========================== + ; Setup Graphics + ;========================== + + bit SET_GR ; graphics mode + bit HIRES ; hires mode + bit TEXTGR ; mixed text/graphics + bit PAGE0 ; first graphics page + jsr HOME + + jsr hgr_clear + + lda #0 + sta DRAW_PAGE + + lda #sprite + sta INH + + lda #10 + sta XPOS + lda #10 + sta YPOS + + jsr hgr_put_sprite + +infinite_loop: + jmp infinite_loop + + + ;============================================= + ; hgr_put_sprite + ;============================================= + ; Sprite to display in INH,INL + ; Location is XPOS,YPOS + +hgr_put_sprite: + + ldy #0 ; byte 0 is xsize ; 2 + lda (INL),Y ; 5 + sta CH ; xsize is in CH ; 3 + iny ; 2 + + lda (INL),Y ; byte 1 is ysize ; 5 + sta CV ; ysize is in CV ; 3 + iny ; 2 + + lda YPOS ; make a copy of ypos ; 3 + sta TEMPY ; as we modify it ; 3 + ;=========== + ; 28 + +hgr_put_sprite_loop: + sty TEMP ; save sprite pointer ; 3 + + lda TEMPY ; load tempy + lsr + lsr ; divide by 8 to get proper row + ; but mul by 4 because array is 2byte addr + tay ; put in Y + + lda TEMPY + and #$7 ; bottom 3 bits + asl + asl + sta SPRITETEMP + + + lda hgr_offsets,Y ; lookup hi-res row address ; 5 + + clc + adc XPOS ; add in XPOS (FIXME: which is div by 7) + sta OUTL ; store out low byte of addy ; 3 + + lda hgr_offsets+1,Y ; look up high byte ; 5 + adc SPRITETEMP + adc DRAW_PAGE ; ; 3 + sta OUTH ; and store it out ; 3 + + + + ldy TEMP ; restore sprite pointer ; 3 + + ; OUTH:OUTL now points at right place + + ldx CH ; load xsize into x ; 3 + + +hgr_put_sprite_pixel: + lda (INL),Y ; get sprite colors ; 5 + iny ; increment sprite pointer ; 2 + + sty TEMP ; save sprite pointer ; 3 + ldy #$0 ; 2 + + sta (OUTL),Y + +hgr_put_sprite_done_draw: + + ldy TEMP ; restore sprite pointer ; 3 + + inc OUTL ; increment output pointer ; 5 + dex ; decrement x counter ; 2 + bne hgr_put_sprite_pixel ; if not done, keep looping ; 2nt/3 + + inc TEMPY ; 5 + dec CV ; decemenet total y count ; 5 + bne hgr_put_sprite_loop ; loop if not done ; 2nt/3 + + rts ; return ; 6 + + + ;========================== + ; hgr clear + ;========================== +hgr_clear: + lda #$00 + sta OUTL + lda #$20 + sta OUTH + +hgr_clear_loop: + lda #$0 + sta (OUTL),Y + iny + bne hgr_clear_loop + + inc OUTH + lda OUTH + cmp #$40 + bne hgr_clear_loop + + rts + + +sprite: + .byte 1,5 + .byte $82,$88,$a0,$88,$82 + + ;=========================== + ; Set Co-ordinate + ;=========================== + + +hgr_offsets: + .word $2000,$2080,$2100,$2180,$2200,$2280,$2300,$2380 + .word $2028,$20a8,$2128,$21a8,$2228,226a8,$2328,$23a8 + .word $2050,$20d0,$2150,$21d0,$2250,$22d0,$2350,$23d0 + + + + +.incbin "GLADOS.HGR" diff --git a/still_alive/zp.inc b/still_alive/zp.inc index cf97cc52..86d2ae1b 100644 --- a/still_alive/zp.inc +++ b/still_alive/zp.inc @@ -123,17 +123,18 @@ YY EQU $E4 DISP_PAGE EQU $ED DRAW_PAGE EQU $EE - ;FIRST EQU $F0 - ;LASTKEY EQU $F1 - ;PADDLE_STATUS EQU $F2 - ;XPOS EQU $F3 - ;YPOS EQU $F4 -TEMP EQU $FA -TEMPY EQU $FB -INL EQU $FC -INH EQU $FD -OUTL EQU $FE -OUTH EQU $FF + ;FIRST EQU $F0 + ;LASTKEY EQU $F1 + ;PADDLE_STATUS EQU $F2 +SPRITETEMP EQU $F2 +XPOS EQU $F3 +YPOS EQU $F4 +TEMP EQU $FA +TEMPY EQU $FB +INL EQU $FC +INH EQU $FD +OUTL EQU $FE +OUTH EQU $FF