From cb010ddcb1b6d6982233f8ee310b0eb57c9e3ffc Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Thu, 24 May 2018 17:01:42 -0400 Subject: [PATCH] sa: work on ending --- still_alive/GLADOS.HGR | Bin 0 -> 8188 bytes still_alive/Makefile | 10 ++- still_alive/README.still_alive | 24 ++++- still_alive/ending.s | 156 +++++++++++++++++++++++++++++++++ still_alive/zp.inc | 23 ++--- 5 files changed, 198 insertions(+), 15 deletions(-) create mode 100644 still_alive/GLADOS.HGR create mode 100644 still_alive/ending.s diff --git a/still_alive/GLADOS.HGR b/still_alive/GLADOS.HGR new file mode 100644 index 0000000000000000000000000000000000000000..d5906f7615c6e8a6975c731f4a1a819de00506ac GIT binary patch literal 8188 zcmc&(&ube;6n0DsA*U3YbJLuH{)zg~+*64Ep1##u{-G*WpcWN9NJ~ zAFGeg5J{V8Op<$uL_4hY_w~~9p(k!ir7A(HFT>-|_3$^qXCW$w{z(!woPR9~UHn0j z`g^IgY~tU3^P_&5_e+HMRTE!W{BDKz|F&o|c<`c8^?vJNBA0+(dM|~;`lq_`J(~D6 z8oG^J4K3!$SSicdrdo?GUyWAwJOtIXo z^2c~>= ze7SoP{D}Y9f3Z#Seh4n>Zzr*E1pi?Ft8WKnZtyIp^1n%rS0=W?J@_BAbeo9z|7i+B z&dY!5XnczICy^WS-;#|E)*-03zFPNw?!f}DK>KrPi#QejV{NK8=^LUyUSYTE4pFU1 zAAtX#B(p54W$N#1&kOl`;GOi>c>lNXS-6-Hv+wL;bj~s%J77%k|Ce7$wS@}((ZqaDBj_1#_oSbL;1~v2F)wB51c6O>9U$q5XD>D8QF@A&M^-1u%#H(0w zEUHm2*lv2{{ZoUFWAxHH;s5XVyy}4co>VWC+D0SdKYT#Z#nfNK{6E+S_XQFV;Ae;J zG?3gqJR$!^!1UGrz1Qpo(rbR~T)_Y83idD7D{E~E?e5v@X77xi;`nb-)z76l&+KIU zzbS=v22yOS`p)W>j=XpbV*kq-FryqQvOeC;JxfA{dkp_u%ztLRSnbz0tD9))9EACw zj)2k*=F9(a+5!J9itQuOsZ0GT@ZCikSt8gDMz(hV{x87;T)dnN3tOiW|8KZnd9aS0 zTRu>a)U)T{UrWdTvuXH~Kb!i;{1-?R z2mg7OCif{s(BG?^n|o-ktcyFF?k4<@o&jzjO#fpCbDzK60rZRQBf;N-X8`}#7ip!5 z9QgT@&!3jV_>U7nGAwMJ3jZtg)Ez21OTo+M@Bqj?fY0aucffsd{>Kp@ zt^N_uw=8Vl!%n=eS?jcPOp0cXR;BiM3_z=vIVRt~Ql z;hVggLw||LtLlOriufPrA$$Uk6^-h7<1bcea-9;nIQd`|8y)t3y^Ue#OP3Id!Bn81 ze?J+gTfm>2|IPp+;`K@7*1-QE_>T<1@^J><|Nhn2HxU0z%a^a7ONK=)rHrmz9VR~C zzlqyF90-fX%IYB!qO8(2+(6`#oNcg)Pp#0QJ59g+9r(X*lguVdkE*V4RY3l&)F?WE z=0Mk(WikBUl6GYOIq(bQe|7l#mut)-Tz`C@;szCl5c~YbRD%d@ILt_uD zSG_y^H#<0`qfhg{bTJvHTR4Br&3|G`HSM48-v`nC`)I7%edjU9|7(kMKI;v5YLdr2 zn)qFUvd#|fesT8Rc%+ZN(0^%>jO=5YU@`55*>B?O-+wSrD8J3||JfSl`GrSEzd-@~ zr(h?}M9gVV?I|w)*BtwQjsF!nRmrI@isHW|+3W-&fzJG*{YUEm)b13s1fd+6?l{Fm)ODIvjvF#f_P7F|sKMZdoxj&_lI zhrhou|4U1m`A^vm*Tg3Z&)m3wQ| 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