From 308584bd594ca6600a7ffe5bcfcc4ba31501c329 Mon Sep 17 00:00:00 2001 From: Dagen Brock Date: Sun, 14 Aug 2022 09:37:18 -0500 Subject: [PATCH] add files missing since back in the day --- README.md | 3 + appy.yaml | 39 ++ content/KFEST2013B.PAK | Bin 0 -> 15201 bytes content/song3.nt | Bin 0 -> 8192 bytes content/torus00.bin | Bin 0 -> 31188 bytes source/quit16.s | 26 - source/quit8.s | 29 - source/shr1.s | 64 --- source/shr2.s | 86 --- source/shrhello.s | 99 ---- source/shrloadimg.s | 266 --------- src/demo.s | 971 +++++++++++++++++++++++++++++++++ {source => src}/font.s | 22 +- src/gslib.mac.s | 32 ++ {source => src}/p8_tools.s | 0 {source => src}/quit.s | 2 +- src/quit16.s | 27 + src/quit8.s | 29 + src/shr1.s | 65 +++ src/shr2.s | 88 +++ src/shrhello.s | 100 ++++ {source => src}/shrloadimg.m.s | 0 src/shrloadimg.s | 267 +++++++++ src/skel.macgen.s | 39 ++ src/torus.s | 29 + 25 files changed, 1701 insertions(+), 582 deletions(-) create mode 100644 appy.yaml create mode 100644 content/KFEST2013B.PAK create mode 100644 content/song3.nt create mode 100644 content/torus00.bin delete mode 100644 source/quit16.s delete mode 100644 source/quit8.s delete mode 100644 source/shr1.s delete mode 100644 source/shr2.s delete mode 100644 source/shrhello.s delete mode 100644 source/shrloadimg.s create mode 100644 src/demo.s rename {source => src}/font.s (96%) create mode 100644 src/gslib.mac.s rename {source => src}/p8_tools.s (100%) rename {source => src}/quit.s (74%) create mode 100644 src/quit16.s create mode 100644 src/quit8.s create mode 100644 src/shr1.s create mode 100644 src/shr2.s create mode 100644 src/shrhello.s rename {source => src}/shrloadimg.m.s (100%) create mode 100644 src/shrloadimg.s create mode 100644 src/skel.macgen.s create mode 100644 src/torus.s diff --git a/README.md b/README.md index 666a627..0267b0d 100644 --- a/README.md +++ b/README.md @@ -16,3 +16,6 @@ Source Files in "Lesson" Order * shrhello.s "Hello World", Example program showing how to use the font routines * shrloadimg.s SHRLoadImage, Loads a PackBytes image and unpacks it to screen * shrloadimg.m.s macros for ToolBox calls in SHRLoadImage +* demo.s the final demo project with sprites and music + +https://youtu.be/NKB44MSod3o diff --git a/appy.yaml b/appy.yaml new file mode 100644 index 0000000..3062943 --- /dev/null +++ b/appy.yaml @@ -0,0 +1,39 @@ +assemble: +- src/quit.s +- src/quit8.s +- src/quit16.s +- src/shr1.s +- src/shr2.s +- src/shrhello.s +- src/shrloadimg.s +- src/demo.s +disks: +- name: gslib + file: gslib.2mg + size: 800KB + files: + - input: src/quit + output: /gslib + - input: src/quit8.system + output: /gslib + - input: src/quit16.sys16 + output: /gslib + - input: src/shr1 + output: /gslib + - input: src/shr2 + output: /gslib + - input: src/shrhello + output: /gslib + - input: src/shrloadimg + output: /gslib + - input: src/demo.sys16 + output: /gslib + + - input: content/KFEST2013B.PAK + output: /gslib + - input: content/torus00.bin + output: /gslib + - input: content/song3.nt + output: /gslib + + \ No newline at end of file diff --git a/content/KFEST2013B.PAK b/content/KFEST2013B.PAK new file mode 100644 index 0000000000000000000000000000000000000000..242c3f08c949646b7ac8781b160a908b5a4004ef GIT binary patch literal 15201 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 literal 0 HcmV?d00001 diff --git a/content/song3.nt b/content/song3.nt new file mode 100644 index 0000000000000000000000000000000000000000..2a7941fe89720bce87c45dfddcacf83bb1537165 GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/content/torus00.bin b/content/torus00.bin new file mode 100644 index 0000000000000000000000000000000000000000..4774dab03b18289449f580b7c719cb1f25145cb7 GIT binary patch literal 31188 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 literal 0 HcmV?d00001 diff --git a/source/quit16.s b/source/quit16.s deleted file mode 100644 index d5a0652..0000000 --- a/source/quit16.s +++ /dev/null @@ -1,26 +0,0 @@ -**************************************** -* Quit16 * -* * -* Dagen Brock * -* 2013-06-10 * -**************************************** - - rel ; compile as relocatable code - dsk Quit16.l ; Save Name - - phk ; Set Data Bank to Program Bank - plb ; Always do this first! - - jsl $E100A8 ; Prodos 16 entry point - da $29 ; Quit code - adrl QuitParm ; address of parameter table - bcs Error ; never taken - -Error brk ; should never get here - -QuitParm adrl $0000 ; pointer to pathname (not used here) - da $00 ; quit type (absolute quit) - - - - diff --git a/source/quit8.s b/source/quit8.s deleted file mode 100644 index b4ea3f3..0000000 --- a/source/quit8.s +++ /dev/null @@ -1,29 +0,0 @@ -**************************************** -* Quit8 * -* * -* Dagen Brock * -* 2013-06-24 * -**************************************** - - org $2000 ; start at $2000 (all ProDOS8 system files) - dsk quit8.system ; tell compiler what name for output file - typ $ff ; set P8 type ($ff = "SYS") for output file - -MLI equ $bf00 - - - -Quit jsr MLI ; first actual command, call ProDOS vector - dfb $65 ; with "quit" request ($65) - da QuitParm - bcs Error - brk $00 ; shouldn't ever here! - -QuitParm dfb 4 ; number of parameters - dfb 0 ; standard quit type - da $0000 ; not needed when using standard quit - dfb 0 ; not used - da $0000 ; not used - - -Error brk $00 ; shouldn't be here either diff --git a/source/shr1.s b/source/shr1.s deleted file mode 100644 index 80f9eb3..0000000 --- a/source/shr1.s +++ /dev/null @@ -1,64 +0,0 @@ -**************************************** -* SHR1 * -* * -* Dagen Brock * -* 2013-07-17 * -**************************************** - - rel ; Compile - dsk SHR1.l ; Save Name - mx %00 ; Program starts in 16-bit mode - - phk ; Set Data Bank to Program Bank - plb ; Always do this first! - -GraphicsOn sep #$30 ; 8-bit mode - lda #$81 - stal $00C029 ; Turn on SHR mode - rep #$30 ; back to 16-bit mode - - jsr WaitKey ; pause - - - -ClearNaive ldx #$0000 ; Start at first pixel - lda #$0000 ; store zeros -:clearloop stal $E12000,x ; screen location - inx - inx - cpx #$8000 ; see if we've filled entire frame/colors/scbs - bne :clearloop ; pause - - - jsr WaitKey - - - -ClearFaster ldx #$7FFE ; start at top this time - lda #$0000 ; store zeros -:clearloop stal $E12000,x ; screen location - dex - dex - ; avoid 16K "compare X's" for 80K cycle savings - bne :clearloop ; loop until we've worked our way down to 0 - jsr WaitKey - - - jsl $E100A8 ; Prodos 16 entry point - da $29 ; Quit code - adrl QuitParm ; address of parameter table - bcs Error ; never taken - -Error brk ; should never get here - -QuitParm adrl $0000 ; pointer to pathname (not used here) - da $00 ; quit type (absolute quite) - -WaitKey sep #$30 ; good old apple ii key wait routine -:wait ldal $00C000 ; but called using long addressing modes - bpl :wait ; in 8-bit mode - stal $00C010 - rep #$30 - rts - - diff --git a/source/shr2.s b/source/shr2.s deleted file mode 100644 index ac8492b..0000000 --- a/source/shr2.s +++ /dev/null @@ -1,86 +0,0 @@ -**************************************** -* SHR2 * -* * -* Dagen Brock * -* 2013-07-17 * -**************************************** - - rel ;Compile - dsk SHR2.l ;Save Name - mx %00 ;Program starts in 16-bit mode - - phk ;Set Data Bank to Program Bank - plb ;Always do this first! - - lda #$0FFF ; WHITE color - ldx #$0001 ; palette index 1 (NOT zero) - jsr SetPaletteColor - - lda #$0000 - jsr SetSCBs ;set all SCBs to 00 (320 mode, pal 0, no fill, no interrupt) - jsr ClearToColor ;clear screen (fill with zeros) - jsr GraphicsOn ;turn on SHR - jsr WaitKey - - lda #$1111 ;clear screen to color 1 - jsr ClearToColor - jsr WaitKey - - jsl $E100A8 ;Prodos 16 entry point - da $29 ;Quit code - adrl QuitParm ;address of parameter table - bcs Error ;never taken - -Error brk ;should never get here - -QuitParm adrl $0000 ;pointer to pathname (not used here) - da $00 ;quit type (absolute quite) - - -**************************************** -* Turn on SHR mode * -**************************************** -GraphicsOn sep #$30 ;8-bit mode - lda #$81 ;%1000 0001 - stal $00C029 ;Turn on SHR mode - rep #$30 ;back to 16-bit mode - rts - -**************************************** -* A= color values (0RGB) * -* X= color/palette offset * -* (0-F = pal0, 10-1F = pal1, etc.) * -**************************************** -SetPaletteColor pha ;save accumulator - txa - asl ;X*2 = real offset to color table - tax - pla - stal $E19E00,x ;palettes are stored from $E19E00-FF - rts ;yup, that's it - -**************************************** -* A= color values (0RGB) * -**************************************** -ClearToColor ldx #$7D00 ;start at top of pixel data! ($2000-9D00) -:clearloop dex - dex - stal $E12000,x ;screen location - bne :clearloop ;loop until we've worked our way down to 0 - rts - -SetSCBs ldx #$0100 ;set all $100 scbs to A -:scbloop dex - dex - stal $E19D00,x - bne :scbloop - rts - -WaitKey sep #$30 -:wait ldal $00C000 - bpl :wait - stal $00C010 - rep #$30 - rts - - diff --git a/source/shrhello.s b/source/shrhello.s deleted file mode 100644 index dc6b389..0000000 --- a/source/shrhello.s +++ /dev/null @@ -1,99 +0,0 @@ -**************************************** -* SHRHELLO * -* * -* Dagen Brock * -* 2013-07-21 * -**************************************** - - rel ; Compile - dsk SHRHELLO.l ; Save Name - mx %00 - phk ; Set Data Bank to Program Bank - plb ; Always do this first! - - lda #$0FFF ; WHITE color - ldx #$000F ; palette index 1 (NOT zero) - jsr SetPaletteColor - lda #$0589 ; other color - ldx #$0001 ; palette index 1 (NOT zero) - jsr SetPaletteColor - lda #$0000 - jsr SetSCBs ; set all SCBs to 00 (320 mode, pal 0, no fill, no interrupt) - jsr GraphicsOn - - - lda #$0000 ; clear screen to color 0 and turn on SHR graphics - jsr ClearToColor - lda #HelloStr - ldx #60*160+30 - jsr DrawString - jsr WaitKey - - lda #$1111 ; clear screen to color 1 - jsr ClearToColor - lda #HelloStr - ldx #60*160+30 - jsr DrawString - jsr WaitKey - - - - jsl $E100A8 ; Prodos 16 entry point - da $29 ; Quit code - adrl QuitParm ; address of parameter table - bcs Error ; never taken - -Error brk ; should never get here - -QuitParm adrl $0000 ; pointer to pathname (not used here) - da $00 ; quit type (absolute quite) - -HelloStr str 'HELLO KANSASFEST' - -**************************************** -* Turn on SHR mode * -**************************************** -GraphicsOn sep #$30 ;8-bit mode - lda #$81 ;%1000 0001 - stal $00C029 ;Turn on SHR mode - rep #$30 ;back to 16-bit mode - rts - -**************************************** -* A= color values (0RGB) * -* X= color/palette offset * -* (0-F = pal0, 10-1F = pal1, etc.) * -**************************************** -SetPaletteColor pha ;save accumulator - txa - asl ;X*2 = real offset to color table - tax - pla - stal $E19E00,x ;palettes are stored from $E19E00-FF - rts ;yup, that's it - -**************************************** -* A= color values (0RGB) * -**************************************** -ClearToColor ldx #$7D00 ;start at top of pixel data! ($2000-9D00) -:clearloop dex - dex - stal $E12000,x ;screen location - bne :clearloop ;loop until we've worked our way down to 0 - rts - -SetSCBs ldx #$0100 ;set all $100 scbs to A -:scbloop dex - dex - stal $E19D00,x - bne :scbloop - rts - -WaitKey sep #$30 -:wait ldal $00c000 - bpl :wait - stal $00c010 - rep #$30 - rts - - use FONT ;include our font library diff --git a/source/shrloadimg.s b/source/shrloadimg.s deleted file mode 100644 index 2160183..0000000 --- a/source/shrloadimg.s +++ /dev/null @@ -1,266 +0,0 @@ -**************************************** -* SHRLOADIMG * -* * -* Dagen Brock * -* 2013-07-21 * -**************************************** - - rel ; Compile - dsk SHRLOADIMG.l ; Save Name - use shrloadimg.m - mx %00 ; Program starts in 16-bit mode - -**************************************** -* Basic Error Macro * -**************************************** -_Err mac - bcc NoErr - do ]0 ; (DO if true) - jsr PgmDeath ; this is conditionally compiled if - str ]1 ; we pass in an error statement - else ; (ELSE) - jmp PgmDeath0 ; we just call the simpler error handler - fin ; (FIN) -NoErr eom - - -**************************************** -* Program Start * -**************************************** - phk ; Set Data Bank to Program Bank - plb ; Always do this first! - - -**************************************** -* Typical tool startup * -**************************************** - _TLStartUp ; normal tool initialization - pha - _MMStartUp - _Err ; should never happen - pla - sta MasterId ; our master handle references the memory allocated to us - ora #$0100 ; set auxID = $01 (valid values $01-0f) - sta UserId ; any memory we request must use our own id - -**************************************** -* Initialize graphics * -**************************************** - jsr AllocOneBank ; Alloc 64KB for Load/Unpack - sta BankLoad ; Store "Bank Pointer" - - ldx #ImageName ; Load+Unpack Boot Picture - jsr LoadPicture ; X=Name, A=Bank to use for loading - - lda BankLoad ; get address of loaded/uncompressed picture - clc - adc #$0080 ; skip header? - sta :copySHR+2 ; and store that over the 'ldal' address below - ldx #$7FFE ; copy all image data -:copySHR ldal $000000,x ; load from BankLoad we allocated - stal $E12000,x ; store to SHR screen - dex - dex - bpl :copySHR - - jsr GraphicsOn - - jsr WaitKey - - bra Quit - -ImageName strl '1/KFEST2013.PAK' -MasterId ds 2 -UserId ds 2 -BankLoad hex 0000 ; used for Load/Unpack - -Quit jsl $E100A8 ; Prodos 16 entry point - da $29 ; Quit code - adrl QuitParm ; address of parameter table - bcs Error ; never taken - -Error brk ; should never get here - -QuitParm adrl $0000 ; pointer to pathname (not used here) - da $00 ; quit type (absolute quite) - -**************************************** -* AllocOneBank * -* This is a custom allocation function * -* that makes use of the fact that we * -* request an entire locked bank and so * -* simply returns the bank in the * -* accumulator. (basically dereference * -* the Handle to get the pointer) * -**************************************** -AllocOneBank PushLong #0 - PushLong #$10000 - PushWord UserId - PushWord #%11000000_00011100 - PushLong #0 - _NewHandle ; returns LONG Handle on stack - plx ; base address of the new handle - pla ; high address 00XX of the new handle (bank) - xba ; swap accumulator bytes to XX00 - sta :bank+2 ; store as bank for next op (overwrite $XX00) -:bank ldal $000001,X ; recover the bank address in A=XX/00 - rts - -**************************************** -* Graphics Helpers * -**************************************** -LoadPicture jsr LoadFile ; X=Nom Image, A=Banc de chargement XX/00 - bcc :loadOK - brl Exit -:loadOK jsr UnpackPicture ; A=Packed Size - rts - - -UnpackPicture sta UP_PackedSize ; Size of Packed Data - lda #$8000 ; Size of output Data Buffer - sta UP_UnPackedSize - lda BankLoad ; Banc de chargement / Decompression - sta UP_Packed+1 ; Packed Data - clc - adc #$0080 - stz UP_UnPacked ; On remet a zero car modifie par l'appel - stz UP_UnPacked+2 - sta UP_UnPacked+1 ; Unpacked Data buffer - - PushWord #0 ; Space for Result : Number of bytes unpacked - PushLong UP_Packed ; Pointer to buffer containing the packed data - PushWord UP_PackedSize ; Size of the Packed Data - PushLong #UP_UnPacked ; Pointer to Pointer to unpacked buffer - PushLong #UP_UnPackedSize ; Pointer to a Word containing size of unpacked data - _UnPackBytes - pla ; Number of byte unpacked - rts - -UP_Packed hex 00000000 ; Address of Packed Data -UP_PackedSize hex 0000 ; Size of Packed Data -UP_UnPacked hex 00000000 ; Address of Unpacked Data Buffer (modified) -UP_UnPackedSize hex 0000 ; Size of Unpacked Data Buffer (modified) - -**************************************** -* Turn on SHR mode * -**************************************** -GraphicsOn sep #$30 ; 8-bit mode - lda #$C1 - stal $00C029 ; Turn on SHR mode - rep #$30 ; back to 16-bit mode - rts - -WaitKey sep #$30 -:wait ldal $00C000 - bpl :wait - stal $00C010 - rep #$30 - rts - - - -**************************************** -* Fatal Error Handler * -**************************************** -PgmDeath tax - pla - inc - phx - phk - pha - bra ContDeath -PgmDeath0 pha - pea $0000 - pea $0000 -ContDeath ldx #$1503 - jsl $E10000 - - -**************************************** -* Normal GSOS Quit * -**************************************** -Exit jsl GSOS - dw $2029 - adrl QuitGS - - -**************************************** -* GS/OS / ProDOS 16 File Routines * -**************************************** -GSOS = $E100A8 - -LoadFile stx OpenGS+4 ; X=File, A=Bank/Page XX/00 - sta ReadGS+5 - -:openFile jsl GSOS ; Open File - dw $2010 - adrl OpenGS - bcs :openReadErr - lda OpenGS+2 - sta GetEOFGS+2 - sta ReadGS+2 - - jsl GSOS ; Get File Size - dw $2019 - adrl GetEOFGS - lda GetEOFGS+4 - sta ReadGS+8 - lda GetEOFGS+6 - sta ReadGS+10 - - jsl GSOS ; Read File Content - dw $2012 - adrl ReadGS - bcs :openReadErr - -:closeFile jsl GSOS ; Close File - dw $2014 - adrl CloseGS - clc - lda GetEOFGS+4 ; File Size - rts - -:openReadErr jsr :closeFile - nop - nop - - PushWord #0 - PushLong #msgLine1 - PushLong #msgLine2 - PushLong #msgLine3 - PushLong #msgLine4 - _TLTextMountVol ; actualname is TLTextMountVolume - pla - cmp #1 - bne :loadFileErr - brl :openFile -:loadFileErr sec - rts - -msgLine1 str 'Unable to load File' -msgLine2 str 'Press a key :' -msgLine3 str ' -> Return to Try Again' -msgLine4 str ' -> Esc to Quit' - - -OpenGS dw 2 ; pCount - ds 2 ; refNum - adrl ImageName ; pathname - -GetEOFGS dw 2 ; pCount - ds 2 ; refNum - ds 4 ; eof - -ReadGS dw 4 ; pCount - ds 2 ; refNum - ds 4 ; dataBuffer - ds 4 ; requestCount - ds 4 ; transferCount - -CloseGS dw 1 ; pCount - ds 2 ; refNum - -QuitGS dw 2 ; pCount - ds 4 ; pathname - ds 2 ; flags - diff --git a/src/demo.s b/src/demo.s new file mode 100644 index 0000000..162bcb5 --- /dev/null +++ b/src/demo.s @@ -0,0 +1,971 @@ +*--------------------------------------* +* Graphics and Sound Library Example * +* * +* Dagen Brock * +* 2013-06-10 * +*--------------------------------------* + + rel + dsk demo.sys16.l + typ $B3 + use gslib.mac + use skel.macgen + lst off + +*--------------------------------------* +* Basic Error Macro * +*--------------------------------------* +_Err mac + bcc NoErr + do ]0 ; (DO if true) + jsr PgmDeath ; this is conditionally compiled if + str ]1 ; we pass in an error statement + else ; (ELSE) + jmp PgmDeath0 ; we just call the simpler error handler + fin ; (FIN) +NoErr eom + +*--------------------------------------* +* Initialize environment * +*--------------------------------------* +Start clc + xce + rep $30 ; set full 16-bit mode + + phk ; set bank - always do this at + plb ; the beginning of a GSOS program + + * tsc ; not sure about this? + * sec + * sbc #$10 + * tcs + * inc + * tcd + + + _TLStartUp ; normal tool initialization + pha + _MMStartUp + _Err ; should never happen + pla + sta MasterId ; our master handle references the memory allocated to us + ora #$0100 ; + sta UserId ; any memory we request must use our own id + + + +*--------------------------------------* +* Initialize graphics * +*--------------------------------------* + jsr AllocOneBank ; Alloc 64KB for Load/Unpack + sta BankLoad ; Store "Bank Pointer" + + ldx #ImageName ; Load+Unpack Boot Picture + jsr LoadPicture ; X=Name, A=Bank to use for loading + + jsr AllocOneBank ; Alloc 64KB for Sprite binary data + sta BankSprite ; Store "Bank Pointer" + sta torusBank00+2 + + ldx #Sprite00Name ; Pointer to filename + lda BankSprite ; "Bank Pointer" to sprite memory + jsr LoadFile ; Load File + + + +*--------------------------------------* +* Initialize sound * +*--------------------------------------* + + pea #0220 ; Tool220 + pea $0105 ; Version Min + ldx #$0F01 ; LoadOneTool + jsl $E10000 + _Err "Tool220 (min v1.05) not Found! : $" + + PushLong #0 ; Allocate Direct Page in Bank 00 + PushLong #$000100 + PushWord UserId + PushWord #$C001 ; Allocation parms + PushLong #0 + _NewHandle + _Err "Can't Allocate ZPage! : $" + pla + sta $00 + pla + sta $02 + + lda [$00] ; PageZero + pha + _NTStartUp + _Err + + lda #ModuleName + ldx #^ModuleName + jsr ReadFile + _Err "Module Not Found! : $" + + pei $06 ; ^@ModuleAdr + pei $04 ; @ModuleAdr (Must be Page aligned !!!) + ldx #$09DC ; NTInitMusic + jsl $E10000 + _Err + + _NTLaunchMusic + _Err + + ;; here? + jsr StartGraphicMode ; Display Graphic Page, activate Shadowing... + + lda BankLoad ; Display Boot Picture + clc + adc #$0080 ; offset by 128 bytes? + jsr FadeIn ; A=XX/YY00 of the image + ;; to here + + + stal $E1C010 + +MainLoop +:vbl ldal $E1C02E ; vblank - move it + and #$00FF + cmp #$00D0 + bne :vbl + + + + jsr UpdateDemoState + jsr HandleDemoState + + pha + ldx #$0BDC ; NTUpdateSound + jsl $E10000 + _Err + pla ; EndOfMusic (0,1 or -1) + +**** + + cmp #1 + bcs EndMusic + jsr MouseClick ; Exit ? + bcs EndMusic + ldal $E1BFFF + bpl MainLoop + +EndMusic jsr ExitGraphic + _NTStopMusic + _Err + _NTShutDown + _Err + lda UserId + pha + ldx #$1102 ; Dispose All + jsl $E10000 + _Err + lda MasterId + pha + _MMShutDown + _Err + + jsl $E100A8 + da $0029 + adrl QuitParm + +QuitParm da 0 + adrl 0 + da 0 + +MasterId ds 2 +UserId ds 2 + +ExitGraphic lda #$0 + ldx #$7cfe +:loop stal $e12000,x + dex + dex + bpl :loop + lda #Str9 + ldx #0 + jsr DrawString + rts + +DemoCounter hex 0000 +RepeatIndex hex 0000 ; stupid frame skip mechanism +TorusLoc1 equ #160*70+5+$2000 +TorusLoc2 equ #160*70+14+$2000 +TorusLoc3 equ #160*70+22+$2000 + +Torii dw #07 +TorusLocs dw #160*70+5+$2000+10 + dw #160*70+25+$2000+10 + dw #160*70+45+$2000+10 + dw #160*70+65+$2000+10 + dw #160*70+85+$2000+10 + dw #160*70+105+$2000+10 + dw #160*70+125+$2000+10 +TorusFrames dw #00 + dw #10 + dw #08 + dw #16 + dw #20 + dw #30 + dw #44 + + + +UndrawTorii + ldx Torii +:nextUndraw dex ;switch natural number to 0-index + phx + + txa + asl + tax + lda TorusLocs,x + tay + lda #60 + jsr Drawtorus ;blackout + plx + cpx #$0 ;done? + bne :nextUndraw + rts + +DrawTorii + ldx Torii +:next dex ;switch natural number to 0-index + phx + + txa + asl + tax + lda TorusLocs,x + tay + lda TorusFrames,x + jsr Drawtorus + plx + cpx #$0 ;done drawing all torii + bne :next + rts + +UpdateTorii + ldy Torii +:nextUpdate dey ;switch natural number to 0-index + + tya + asl + tax + lda TorusFrames,x + inc + cmp #60 ;reset frame counter + bne :not + lda #$0 +:not sta TorusFrames,x + + cpy #$0 + bne :nextUpdate + rts + +UpdateSprite + jsr UndrawTorii + + jsr DrawTorii + + inc RepeatIndex ; ghetto fram skip + lda RepeatIndex + cmp #04 + bne :noAdvance + stz RepeatIndex + ;; do stuff + jsr UpdateTorii +:noAdvance +:done rts + + +ScrollTop equ $e12000+#160*80 +Scroll + ldx #$00 + ldy #158 +:scloop ldal ScrollTop+2,x ;#80*160 + stal ScrollTop,x + ldal ScrollTop+2+160,x ;2 + stal ScrollTop+160,x + ldal ScrollTop+2+320,x ;3 + stal ScrollTop+320,x + ldal ScrollTop+2+480,x ;4 + stal ScrollTop+480,x + ldal ScrollTop+2+640,x ;5 + stal ScrollTop+640,x + ldal ScrollTop+2+800,x ;6 + stal ScrollTop+800,x +* ldal ScrollTop+2+960,x ;7 +* stal ScrollTop+960,x +* ldal ScrollTop+2+1120,x ;7 +* stal ScrollTop+1120,x +* ldal ScrollTop+2+1280,x ;7 +* stal ScrollTop+1280,x +* ldal ScrollTop+2+1440,x ;7 +* stal ScrollTop+1440,x +* ldal ScrollTop+2+1600,x ;7 +* stal ScrollTop+1600,x +* ldal ScrollTop+2+1760,x ;7 +* stal ScrollTop+1760,x +* ldal ScrollTop+2+1920,x ;7 +* stal ScrollTop+1920,x +* ldal ScrollTop+2+2080,x ;7 +* stal ScrollTop+2080,x +* ldal ScrollTop+2+2240,x ;7 +* stal ScrollTop+2240,x +* ldal ScrollTop+2+2400,x ;7 +* stal ScrollTop+2400,x +* ldal ScrollTop+2+2560,x ;7 +* stal ScrollTop+2560,x +* ldal ScrollTop+2+2720,x ;7 +* stal ScrollTop+2720,x +* ldal ScrollTop+2+2880,x ;7 +* stal ScrollTop+2880,x +* ldal ScrollTop+2+3040,x ;7 +* stal ScrollTop+3040,x + inx + inx + dey + dey + beq :done + brl :scloop +:done rts + + + +ReadFile sta Parm0 + stx Parm0+2 + jsl $E100A8 + da $10 ; Open + adrl Params + bcc *+3 + rts + jsl $E100A8 + da $19 + adrl Params + bcc No_ErrGetEof + pha + jsr Go_Close + pla + sec + rts +No_ErrGetEof pha + pha + lda Parm0+2 + sta Parm1+2 + pha + lda Parm0 + sta Parm1 + pha + lda UserId + pha + pea $C00C ; Page Aligned!!! + pea $0 + pea $0 + ldx #$0902 ; NewHandle + jsl $E10000 + _Err "Out Of Memory Error! : $" + pla + sta $00 + pla + sta $02 + ldy #2 + lda [$00],Y + sta Parm0+2 + tax + lda [$00] + sta Parm0 + sta $04 + stx $06 + jsl $E100A8 + da $12 ; Read + adrl Params + bcc Go_Close + pha + pei $02 ; Free mem + pei $00 + ldx #$1002 ; Dispose + jsl $E10000 + _Err + jsr Go_Close + pla + sec + rts +Go_Close jsl $E100A8 + da $14 ; Close + adrl Params + rts + +Params da 0 +Parm0 adrl 0 +Parm1 adrl 0 + adrl 0 + +*------------------------------------------------- +PgmDeath tax + pla + inc + phx + phk + pha + bra ContDeath +PgmDeath0 pha + pea $0000 + pea $0000 +ContDeath ldx #$1503 + jsl $E10000 + +** SPRITE / PIC / MEMORY STUFF + +BankLoad hex 0000 ; used for Load/Unpack +BankSprite hex 0000 +StackAddress hex 0000 +ImageName strl '1/KFEST2013B.PAK' +Sprite00Name strl '1/torus00.bin' +ModuleName str 'SONG3.NT' ; Module to be played + +***** +* NEW NEW NEW +* NEWNEW +***** + +Str1 str 'GREETINGS FROM KANSASFEST' ;30 +Str2 str 'GREETINGS TO OZKFEST' ;40 +Str3 str 'SORRY IT',27,'S NOT A BIGGER DEMO' ;24 + +Str4 str 'THANKS TO BRUTAL DELUXE' ;34 +Str6 str 'THANKS TO KFEST STAFF & ATTENDEES!' ;14 +Str5 str 'MEGA THANKS TO YOU THE VIEWER!!' ;26 +Str7 str 'OK... I',27,'M TIRED ;)' ;42 +Str8 str 'DIGAROK - 2013' ;52 +Str9 str 'THAT',27,'S ALL FOLKS' + +MODE_NOP equ 0000 +MODE_TORUS equ 0001 +MODE_STR1 equ 0002 +MODE_STR2 equ 0003 +MODE_SCROLL equ 0009 + +MODE dw 0000 +seconds equ #60 + +UpdateDemoState + inc DemoCounter + lda DemoCounter + + +* Draw Str1 + cmp #3*seconds-5 + bne :next1 + lda #Str1 ;draw str1 @ 2 second + ldx #80*160+30 + jsr DrawString + lda #MODE_NOP + sta MODE + rts + +:next1 cmp #5*seconds-20 ;start scroll at 3 second + bne :next2 + lda #MODE_SCROLL + sta MODE + rts + +:next2 cmp #7*seconds ;draw torii + bne :next3a + lda #MODE_TORUS + sta MODE + rts +:next3a cmp #14*seconds + bne :next3 + + lda #MODE_NOP + sta MODE + jsr UndrawTorii + rts + +:next3 cmp #15*seconds+30 ;second message + bne :next4 + + lda #Str2 ;draw str1 @ 2 second + ldx #80*160+40 + jsr DrawString + rts + +:next4 cmp #18*seconds+30 ;scroll off message + bne :next5 + lda #MODE_SCROLL + sta MODE + rts + +:next5 cmp #20*seconds + bne :next6 + + lda #Str3 + ldx #80*160+24 + jsr DrawString + lda #MODE_NOP + sta MODE + rts + +:next6 cmp #22*seconds + bne :next7 + lda #MODE_SCROLL + sta MODE + rts +:next7 cmp #23*seconds+30 ;draw torii + bne :next8a + lda #MODE_TORUS + sta MODE + rts +:next8a cmp #26*seconds+45 + bne :next8 + jsr UndrawTorii + lda #MODE_NOP + sta MODE + rts + + +:next8 + cmp #27*seconds + bne :next8scroll + lda #Str4 + ldx #80*160+34 + jsr DrawString + rts +:next8scroll + cmp #29*seconds + bne :next9 + lda #MODE_SCROLL + sta MODE + rts + +:next9 + cmp #30*seconds+30 + bne :next9scroll + lda #Str5 + ldx #80*160+14 + jsr DrawString + lda #MODE_NOP + sta MODE + rts +:next9scroll + cmp #33*seconds + bne :next10 + lda #MODE_SCROLL + sta MODE + rts + + +:next10 + cmp #34*seconds+30 + bne :next10scroll + lda #Str6 + ldx #80*160+20 + jsr DrawString + lda #MODE_NOP + sta MODE + rts +:next10scroll + cmp #36*seconds + bne :next11 + lda #MODE_SCROLL + sta MODE + rts + + +:next11 + cmp #37*seconds+30 + bne :next11scroll + lda #Str7 + ldx #80*160+42 + jsr DrawString + lda #MODE_NOP + sta MODE + rts +:next11scroll + cmp #40*seconds + bne :next12 + lda #MODE_SCROLL + sta MODE + rts + +:next12 + cmp #41*seconds+30 + bne :next12scroll + lda #Str8 + ldx #80*160+52 + jsr DrawString + lda #MODE_NOP + sta MODE + rts +:next12scroll + cmp #46*seconds + bne :next13 + lda #MODE_SCROLL + sta MODE + rts +:next13 + cmp #48*seconds+30 + bne :next14 + lda #MODE_TORUS + sta MODE +:next14 + rts + +HandleDemoState + lda MODE + cmp #MODE_NOP + bne :next1 + rts + +:next1 cmp #MODE_TORUS + bne :next2 + jsr UpdateSprite ;does whole torus line. get it? haahah + rts + +:next2 cmp #MODE_SCROLL + bne :next3 + jsr Scroll + + rts + +:next3 + rts + + + + +*--------------------------------------* +* GS/OS File Loading Routines * +*--------------------------------------* +GSOS = $E100A8 + +LoadFile stx gsosOPEN+4 ; X=File, A=Bank XX/00 + sta gsosREAD+5 + +:openFile jsl GSOS ; Open File + dw $2010 + adrl gsosOPEN + bcs :openReadErr + lda gsosOPEN+2 + sta gsosGETEOF+2 + sta gsosREAD+2 + + jsl GSOS ; Get File Size + dw $2019 + adrl gsosGETEOF + lda gsosGETEOF+4 + sta gsosREAD+8 + lda gsosGETEOF+6 + sta gsosREAD+10 + + jsl GSOS ; Read File Content + dw $2012 + adrl gsosREAD + bcs :openReadErr + +:closeFile jsl GSOS ; Close File + dw $2014 + adrl gsosCLOSE + clc + lda gsosGETEOF+4 ; File Size + rts + +:openReadErr jsr :closeFile + nop + nop + + PushWord #0 + PushLong #msgLine1 + PushLong #msgLine2 + PushLong #msgLine3 + PushLong #msgLine4 + ; _TLTextMountVolume + ; TODO + pla + cmp #1 + bne LF_Err1 + brl :openFile +LF_Err1 sec + rts + +msgLine1 str 'Unable to load File' +msgLine2 str 'Press a key :' +msgLine3 str ' -> Return to Try Again' +msgLine4 str ' -> Esc to Quit' + +*------- + +Exit jsl GSOS + dw $2029 + adrl gsosQUIT + +*------- + +gsosOPEN dw 2 ; pCount + ds 2 ; refNum + adrl ImageName ; pathname + +gsosGETEOF dw 2 ; pCount + ds 2 ; refNum + ds 4 ; eof + +gsosREAD dw 4 ; pCount + ds 2 ; refNum + ds 4 ; dataBuffer + ds 4 ; requestCount + ds 4 ; transferCount + +gsosCLOSE dw 1 ; pCount + ds 2 ; refNum + +gsosQUIT dw 2 ; pCount + ds 4 ; pathname + ds 2 ; flags + + + +*--------------------------------------* +* Graphics Helpers * +*--------------------------------------* +LoadPicture jsr LoadFile ; X=Nom Image, A=Banc de chargement XX/00 + bcc :loadOK + brl Exit +:loadOK jsr UnpackPicture ; A=Packed Size + rts + + +UnpackPicture sta UP_PackedSize ; Size of Packed Data + lda #$8000 ; Size of output Data Buffer + sta UP_UnPackedSize + lda BankLoad ; Banc de chargement / Decompression + sta UP_Packed+1 ; Packed Data + clc + adc #$0080 + stz UP_UnPacked ; On remet a zero car modifie par l'appel + stz UP_UnPacked+2 + sta UP_UnPacked+1 ; Unpacked Data buffer + + PushWord #0 ; Space for Result : Number of bytes unpacked + PushLong UP_Packed ; Pointer to buffer containing the packed data + PushWord UP_PackedSize ; Size of the Packed Data + PushLong #UP_UnPacked ; Pointer to Pointer to unpacked buffer + PushLong #UP_UnPackedSize ; Pointer to a Word containing size of unpacked data + _UnPackBytes + pla ; Number of byte unpacked + rts + +UP_Packed hex 00000000 ; Address of Packed Data +UP_PackedSize hex 0000 ; Size of Packed Data +UP_UnPacked hex 00000000 ; Address of Unpacked Data Buffer (modified) +UP_UnPackedSize hex 0000 ; Size of Unpacked Data Buffer (modified) + +*--------------------------------------* +* Misc Graphics Subroutines * +*--------------------------------------* +StartGraphicMode sep #$30 + lda #$41 ; Linearise la page graphique + stal $00C029 + rep #$30 + + ldx #$7FFE ; Efface l'Ecran + lda #$0000 +SGM_1 stal $E12000,X + dex + dex + bpl SGM_1 + + sep #$30 + + lda #$F0 ; Fond Noir + stal $00C022 + lda #$00 + stal $00C034 ; Bordure Noire + + lda #$A1 ; Affiche la page graphique + stal $00C029 + + lda #$00 ; Active le Shadowing + stal $00C035 + rep #$30 + rts + +*-------------- + +FadeIn sta FI_00+2 ; A=XX/YY00 de l'image + clc + adc #$007E + sta FI_3+2 + sta FI_5+2 + sta FI_7+2 + + ldx #$01FE + lda #$0000 ; NETTOYAGE PREALABLE DES PALETTES en $01/2000 +FI_0 stal $019E00,X + dex + dex + bpl FI_0 + + ldx #$7DFE ; RECOPIE LES POINTS + SCB en $01/2000 +FI_00 ldal $000000,X + stal $012000,X + dex + dex + bpl FI_00 + + ldy #$000F ; ON FAIT UN FADE IN SUR LES 16 PALETTES +FI_1 ldx #$01FE + +FI_2 ldal $019E00,X ; COMPOSANTE BLEUE + and #$000F + sta FI_33+1 +FI_3 ldal $06FE00,X + and #$000F +FI_33 cmp #$0000 + beq FI_4 + ldal $019E00,X + clc + adc #$0001 + stal $019E00,X + +FI_4 ldal $019E00,X ; COMPOSANTE VERTE + and #$00F0 + sta FI_55+1 +FI_5 ldal $06FE00,X + and #$00F0 +FI_55 cmp #$0000 + beq FI_6 + ldal $019E00,X + clc + adc #$0010 + stal $019E00,X + +FI_6 ldal $019E00,X ; COMPOSANTE ROUGE + and #$0F00 + sta FI_77+1 +FI_7 ldal $06FE00,X + and #$0F00 +FI_77 cmp #$0000 + beq FI_8 + ldal $019E00,X + clc + adc #$0100 + stal $019E00,X + +FI_8 dex + dex + bpl FI_2 + jsr WaitForVBL ; TEMPO + jsr WaitForVBL + dey + bpl FI_1 + rts + +*-------------- + +FadeOut ldy #$000F ; Fade Out de l'Ecran 01/2000 +FO_0 ldx #$01FE + +FO_1 ldal $E19E00,X ; COMPOSANTE BLEUE + and #$000F + beq FO_2 + ldal $E19E00,X + sec + sbc #$0001 + stal $E19E00,X + +FO_2 ldal $E19E00,X ; COMPOSANTE VERTE + and #$00F0 + beq FO_3 + ldal $E19E00,X + sec + sbc #$0010 + stal $E19E00,X + +FO_3 ldal $E19E00,X ; COMPOSANTE ROUGE + and #$0F00 + beq FO_4 + ldal $E19E00,X + sec + sbc #$0100 + stal $E19E00,X + +FO_4 dex + dex + bpl FO_1 + dey + jsr WaitForVBL ; TEMPO + jsr WaitForVBL + bpl FO_0 + rts + +*-------------- + +WaitForVBL sep #$30 ; Wait fr VBL +:wait1 ldal $00C019 + bmi :wait1 +:wait2 ldal $00C019 + bpl :wait2 + rep #$30 + rts + + + +*--------------------------------------* +* Misc Subroutines and helpers * +*--------------------------------------* +WaitForKey sep #$30 +:wait ldal $00c000 + bpl :wait + stal $00c010 + rep #$30 + rts + + +MouseClick clc ; BOUTON SOURIS ENFONCE ? + ldal $E0C026 + bmi MC_1 + rts +MC_1 ldal $E0C023 + ldal $E0C023 + bpl MC_2 + rts +MC_2 sec + rts + + +*--------------------------------------* +* Memory allocation routines * +*--------------------------------------* + +*--------------------------------------* +* AllocOneBank * +* This is a custom allocation function * +* that makes use of the fact that we * +* request an entire locked bank and so * +* simply returns the bank in the * +* accumulator. (basically dereference * +* the Handle to get the pointer) * +*--------------------------------------* +AllocOneBank PushLong #0 + PushLong #$10000 + PushWord UserId + PushWord #%11000000_00011100 + PushLong #0 + _NewHandle ; returns LONG Handle on stack + plx ; base address of the new handle + pla ; high address 00XX of the new handle (bank) + xba ; swab accumulator bytes to XX00 + sta :bank+2 ; store as bank for next op (overwrite $XX00) +:bank ldal $000001,X ; recover the bank address in A=XX/00 + rts + +*--------------------------------------* +* Subroutine Includes * +*--------------------------------------* + use TORUS + use FONT + + lst on diff --git a/source/font.s b/src/font.s similarity index 96% rename from source/font.s rename to src/font.s index 31f015f..4b2ac9a 100644 --- a/source/font.s +++ b/src/font.s @@ -55,27 +55,27 @@ NextChar lda ]F_CharIdx lda FontData,y stal $E12000,x lda FontData+2,y - stal #2+$E12000,x + stal $E12000+2,x lda FontData+4,y - stal #160+$E12000,x + stal $E12000+#160,x lda FontData+6,y - stal #160+2+$E12000,x + stal $E12000+#160+2,x lda FontData+8,y - stal #160*2+$E12000,x + stal $E12000+#320,x lda FontData+10,y - stal #160*2+2+$E12000,x + stal $E12000+#320+2,x lda FontData+12,y - stal #160*3+$E12000,x + stal $E12000+#480,x lda FontData+14,y - stal #160*3+2+$E12000,x + stal $E12000+#480+2,x lda FontData+16,y - stal #160*4+$E12000,x + stal $E12000+#640,x lda FontData+18,y - stal #160*4+2+$E12000,x + stal $E12000+#640+2,x lda FontData+20,y - stal #160*5+$E12000,x + stal $E12000+#800,x lda FontData+22,y - stal #160*5+2+$E12000,x + stal $E12000+#800+2,x rts diff --git a/src/gslib.mac.s b/src/gslib.mac.s new file mode 100644 index 0000000..99a0b1b --- /dev/null +++ b/src/gslib.mac.s @@ -0,0 +1,32 @@ +* GSLIB APP HELPER MACROS + + +* NOISETRACKER MACROS + +_NTStartUp MAC + LDX #$02DC + JSL $E10000 + <<< + +*_NTInitMusic MAC +* <<< + +_NTLaunchMusic MAC + LDX #$0ADC + JSL $E10000 + <<< + +*_NTStartMusic MAC +* <<< + +_NTStopMusic MAC + LDX #$0CDC + JSL $E10000 + <<< + +_NTShutDown MAC + LDX #$03DC + JSL $E10000 + <<< + + diff --git a/source/p8_tools.s b/src/p8_tools.s similarity index 100% rename from source/p8_tools.s rename to src/p8_tools.s diff --git a/source/quit.s b/src/quit.s similarity index 74% rename from source/quit.s rename to src/quit.s index d0b3ccd..4f29257 100644 --- a/source/quit.s +++ b/src/quit.s @@ -5,7 +5,7 @@ * 2013-06-24 * **************************************** - rts ; return from wherever we were called + rts ; return from wherever we were called diff --git a/src/quit16.s b/src/quit16.s new file mode 100644 index 0000000..9624e87 --- /dev/null +++ b/src/quit16.s @@ -0,0 +1,27 @@ +**************************************** +* Quit16 * +* * +* Dagen Brock * +* 2013-06-10 * +**************************************** + + rel ; compile as relocatable code + dsk Quit16.sys16 ; Save Name + typ $B3 ; s16 + + phk ; Set Data Bank to Program Bank + plb ; Always do this first! + + jsl $E100A8 ; Prodos 16 entry point + da $29 ; Quit code + adrl QuitParm ; address of parameter table + bcs Error ; never taken + +Error brk ; should never get here + +QuitParm adrl $0000 ; pointer to pathname (not used here) + da $00 ; quit type (absolute quit) + + + + diff --git a/src/quit8.s b/src/quit8.s new file mode 100644 index 0000000..b9059e1 --- /dev/null +++ b/src/quit8.s @@ -0,0 +1,29 @@ +**************************************** +* Quit8 * +* * +* Dagen Brock * +* 2013-06-24 * +**************************************** + + org $2000 ; start at $2000 (all ProDOS8 system files) + dsk quit8.system ; tell compiler what name for output file + typ $ff ; set P8 type ($ff = "SYS") for output file + +MLI equ $bf00 + + + +Quit jsr MLI ; first actual command, call ProDOS vector + dfb $65 ; with "quit" request ($65) + da QuitParm + bcs Error + brk $00 ; shouldn't ever here! + +QuitParm dfb 4 ; number of parameters + dfb 0 ; standard quit type + da $0000 ; not needed when using standard quit + dfb 0 ; not used + da $0000 ; not used + + +Error brk $00 ; shouldn't be here either diff --git a/src/shr1.s b/src/shr1.s new file mode 100644 index 0000000..11f4854 --- /dev/null +++ b/src/shr1.s @@ -0,0 +1,65 @@ +**************************************** +* SHR1 * +* * +* Dagen Brock * +* 2013-07-17 * +**************************************** + + rel ; Compile + dsk SHR1.l ; Save Name + typ $B3 + mx %00 ; Program starts in 16-bit mode + + phk ; Set Data Bank to Program Bank + plb ; Always do this first! + +GraphicsOn sep #$30 ; 8-bit mode + lda #$81 + stal $00C029 ; Turn on SHR mode + rep #$30 ; back to 16-bit mode + + jsr WaitKey ; pause + + + +ClearNaive ldx #$0000 ; Start at first pixel + lda #$0000 ; store zeros +:clearloop stal $E12000,x ; screen location + inx + inx + cpx #$8000 ; see if we've filled entire frame/colors/scbs + bne :clearloop ; pause + + + jsr WaitKey + + + +ClearFaster ldx #$7FFE ; start at top this time + lda #$0000 ; store zeros +:clearloop stal $E12000,x ; screen location + dex + dex + ; avoid 16K "compare X's" for 80K cycle savings + bne :clearloop ; loop until we've worked our way down to 0 + jsr WaitKey + + + jsl $E100A8 ; Prodos 16 entry point + da $29 ; Quit code + adrl QuitParm ; address of parameter table + bcs Error ; never taken + +Error brk ; should never get here + +QuitParm adrl $0000 ; pointer to pathname (not used here) + da $00 ; quit type (absolute quite) + +WaitKey sep #$30 ; good old apple ii key wait routine +:wait ldal $00C000 ; but called using long addressing modes + bpl :wait ; in 8-bit mode + stal $00C010 + rep #$30 + rts + + diff --git a/src/shr2.s b/src/shr2.s new file mode 100644 index 0000000..3ded381 --- /dev/null +++ b/src/shr2.s @@ -0,0 +1,88 @@ +**************************************** +* SHR2 * +* * +* Dagen Brock * +* 2013-07-17 * +**************************************** + + rel ;Compile + dsk SHR2.l ;Save Name + typ $B3 + + mx %00 ;Program starts in 16-bit mode + + phk ;Set Data Bank to Program Bank + plb ;Always do this first! + + lda #$0FFF ; WHITE color + ldx #$0001 ; palette index 1 (NOT zero) + jsr SetPaletteColor + + lda #$0000 + jsr SetSCBs ;set all SCBs to 00 (320 mode, pal 0, no fill, no interrupt) + jsr ClearToColor ;clear screen (fill with zeros) + jsr GraphicsOn ;turn on SHR + jsr WaitKey + + lda #$1111 ;clear screen to color 1 + jsr ClearToColor + jsr WaitKey + + jsl $E100A8 ;Prodos 16 entry point + da $29 ;Quit code + adrl QuitParm ;address of parameter table + bcs Error ;never taken + +Error brk ;should never get here + +QuitParm adrl $0000 ;pointer to pathname (not used here) + da $00 ;quit type (absolute quite) + + +**************************************** +* Turn on SHR mode * +**************************************** +GraphicsOn sep #$30 ;8-bit mode + lda #$81 ;%1000 0001 + stal $00C029 ;Turn on SHR mode + rep #$30 ;back to 16-bit mode + rts + +**************************************** +* A= color values (0RGB) * +* X= color/palette offset * +* (0-F = pal0, 10-1F = pal1, etc.) * +**************************************** +SetPaletteColor pha ;save accumulator + txa + asl ;X*2 = real offset to color table + tax + pla + stal $E19E00,x ;palettes are stored from $E19E00-FF + rts ;yup, that's it + +**************************************** +* A= color values (0RGB) * +**************************************** +ClearToColor ldx #$7D00 ;start at top of pixel data! ($2000-9D00) +:clearloop dex + dex + stal $E12000,x ;screen location + bne :clearloop ;loop until we've worked our way down to 0 + rts + +SetSCBs ldx #$0100 ;set all $100 scbs to A +:scbloop dex + dex + stal $E19D00,x + bne :scbloop + rts + +WaitKey sep #$30 +:wait ldal $00C000 + bpl :wait + stal $00C010 + rep #$30 + rts + + diff --git a/src/shrhello.s b/src/shrhello.s new file mode 100644 index 0000000..5e1e2d9 --- /dev/null +++ b/src/shrhello.s @@ -0,0 +1,100 @@ +**************************************** +* SHRHELLO * +* * +* Dagen Brock * +* 2013-07-21 * +**************************************** + + rel ; Compile + dsk SHRHELLO.l ; Save Name + typ $B3 + mx %00 + phk ; Set Data Bank to Program Bank + plb ; Always do this first! + + lda #$0FFF ; WHITE color + ldx #$000F ; palette index 1 (NOT zero) + jsr SetPaletteColor + lda #$0589 ; other color + ldx #$0001 ; palette index 1 (NOT zero) + jsr SetPaletteColor + lda #$0000 + jsr SetSCBs ; set all SCBs to 00 (320 mode, pal 0, no fill, no interrupt) + jsr GraphicsOn + + + lda #$0000 ; clear screen to color 0 and turn on SHR graphics + jsr ClearToColor + lda #HelloStr + ldx #60*160+30 + jsr DrawString + jsr WaitKey + + lda #$1111 ; clear screen to color 1 + jsr ClearToColor + lda #HelloStr + ldx #60*160+30 + jsr DrawString + jsr WaitKey + + + + jsl $E100A8 ; Prodos 16 entry point + da $29 ; Quit code + adrl QuitParm ; address of parameter table + bcs Error ; never taken + +Error brk ; should never get here + +QuitParm adrl $0000 ; pointer to pathname (not used here) + da $00 ; quit type (absolute quite) + +HelloStr str 'HELLO KANSASFEST' + +**************************************** +* Turn on SHR mode * +**************************************** +GraphicsOn sep #$30 ;8-bit mode + lda #$81 ;%1000 0001 + stal $00C029 ;Turn on SHR mode + rep #$30 ;back to 16-bit mode + rts + +**************************************** +* A= color values (0RGB) * +* X= color/palette offset * +* (0-F = pal0, 10-1F = pal1, etc.) * +**************************************** +SetPaletteColor pha ;save accumulator + txa + asl ;X*2 = real offset to color table + tax + pla + stal $E19E00,x ;palettes are stored from $E19E00-FF + rts ;yup, that's it + +**************************************** +* A= color values (0RGB) * +**************************************** +ClearToColor ldx #$7D00 ;start at top of pixel data! ($2000-9D00) +:clearloop dex + dex + stal $E12000,x ;screen location + bne :clearloop ;loop until we've worked our way down to 0 + rts + +SetSCBs ldx #$0100 ;set all $100 scbs to A +:scbloop dex + dex + stal $E19D00,x + bne :scbloop + rts + +WaitKey sep #$30 +:wait ldal $00c000 + bpl :wait + stal $00c010 + rep #$30 + rts + + use FONT ;include our font library diff --git a/source/shrloadimg.m.s b/src/shrloadimg.m.s similarity index 100% rename from source/shrloadimg.m.s rename to src/shrloadimg.m.s diff --git a/src/shrloadimg.s b/src/shrloadimg.s new file mode 100644 index 0000000..f1f6168 --- /dev/null +++ b/src/shrloadimg.s @@ -0,0 +1,267 @@ +**************************************** +* SHRLOADIMG * +* * +* Dagen Brock * +* 2013-07-21 * +**************************************** + + rel ; Compile + dsk SHRLOADIMG.l ; Save Name + typ $B3 + use shrloadimg.m + mx %00 ; Program starts in 16-bit mode + +**************************************** +* Basic Error Macro * +**************************************** +_Err mac + bcc NoErr + do ]0 ; (DO if true) + jsr PgmDeath ; this is conditionally compiled if + str ]1 ; we pass in an error statement + else ; (ELSE) + jmp PgmDeath0 ; we just call the simpler error handler + fin ; (FIN) +NoErr eom + + +**************************************** +* Program Start * +**************************************** + phk ; Set Data Bank to Program Bank + plb ; Always do this first! + + +**************************************** +* Typical tool startup * +**************************************** + _TLStartUp ; normal tool initialization + pha + _MMStartUp + _Err ; should never happen + pla + sta MasterId ; our master handle references the memory allocated to us + ora #$0100 ; set auxID = $01 (valid values $01-0f) + sta UserId ; any memory we request must use our own id + +**************************************** +* Initialize graphics * +**************************************** + jsr AllocOneBank ; Alloc 64KB for Load/Unpack + sta BankLoad ; Store "Bank Pointer" + + ldx #ImageName ; Load+Unpack Boot Picture + jsr LoadPicture ; X=Name, A=Bank to use for loading + + lda BankLoad ; get address of loaded/uncompressed picture + clc + adc #$0080 ; skip header? + sta :copySHR+2 ; and store that over the 'ldal' address below + ldx #$7FFE ; copy all image data +:copySHR ldal $000000,x ; load from BankLoad we allocated + stal $E12000,x ; store to SHR screen + dex + dex + bpl :copySHR + + jsr GraphicsOn + + jsr WaitKey + + bra Quit + +ImageName strl '1/KFEST2013.PAK' +MasterId ds 2 +UserId ds 2 +BankLoad hex 0000 ; used for Load/Unpack + +Quit jsl $E100A8 ; Prodos 16 entry point + da $29 ; Quit code + adrl QuitParm ; address of parameter table + bcs Error ; never taken + +Error brk ; should never get here + +QuitParm adrl $0000 ; pointer to pathname (not used here) + da $00 ; quit type (absolute quite) + +**************************************** +* AllocOneBank * +* This is a custom allocation function * +* that makes use of the fact that we * +* request an entire locked bank and so * +* simply returns the bank in the * +* accumulator. (basically dereference * +* the Handle to get the pointer) * +**************************************** +AllocOneBank PushLong #0 + PushLong #$10000 + PushWord UserId + PushWord #%11000000_00011100 + PushLong #0 + _NewHandle ; returns LONG Handle on stack + plx ; base address of the new handle + pla ; high address 00XX of the new handle (bank) + xba ; swap accumulator bytes to XX00 + sta :bank+2 ; store as bank for next op (overwrite $XX00) +:bank ldal $000001,X ; recover the bank address in A=XX/00 + rts + +**************************************** +* Graphics Helpers * +**************************************** +LoadPicture jsr LoadFile ; X=Nom Image, A=Banc de chargement XX/00 + bcc :loadOK + brl Exit +:loadOK jsr UnpackPicture ; A=Packed Size + rts + + +UnpackPicture sta UP_PackedSize ; Size of Packed Data + lda #$8000 ; Size of output Data Buffer + sta UP_UnPackedSize + lda BankLoad ; Banc de chargement / Decompression + sta UP_Packed+1 ; Packed Data + clc + adc #$0080 + stz UP_UnPacked ; On remet a zero car modifie par l'appel + stz UP_UnPacked+2 + sta UP_UnPacked+1 ; Unpacked Data buffer + + PushWord #0 ; Space for Result : Number of bytes unpacked + PushLong UP_Packed ; Pointer to buffer containing the packed data + PushWord UP_PackedSize ; Size of the Packed Data + PushLong #UP_UnPacked ; Pointer to Pointer to unpacked buffer + PushLong #UP_UnPackedSize ; Pointer to a Word containing size of unpacked data + _UnPackBytes + pla ; Number of byte unpacked + rts + +UP_Packed hex 00000000 ; Address of Packed Data +UP_PackedSize hex 0000 ; Size of Packed Data +UP_UnPacked hex 00000000 ; Address of Unpacked Data Buffer (modified) +UP_UnPackedSize hex 0000 ; Size of Unpacked Data Buffer (modified) + +**************************************** +* Turn on SHR mode * +**************************************** +GraphicsOn sep #$30 ; 8-bit mode + lda #$C1 + stal $00C029 ; Turn on SHR mode + rep #$30 ; back to 16-bit mode + rts + +WaitKey sep #$30 +:wait ldal $00C000 + bpl :wait + stal $00C010 + rep #$30 + rts + + + +**************************************** +* Fatal Error Handler * +**************************************** +PgmDeath tax + pla + inc + phx + phk + pha + bra ContDeath +PgmDeath0 pha + pea $0000 + pea $0000 +ContDeath ldx #$1503 + jsl $E10000 + + +**************************************** +* Normal GSOS Quit * +**************************************** +Exit jsl GSOS + dw $2029 + adrl QuitGS + + +**************************************** +* GS/OS / ProDOS 16 File Routines * +**************************************** +GSOS = $E100A8 + +LoadFile stx OpenGS+4 ; X=File, A=Bank/Page XX/00 + sta ReadGS+5 + +:openFile jsl GSOS ; Open File + dw $2010 + adrl OpenGS + bcs :openReadErr + lda OpenGS+2 + sta GetEOFGS+2 + sta ReadGS+2 + + jsl GSOS ; Get File Size + dw $2019 + adrl GetEOFGS + lda GetEOFGS+4 + sta ReadGS+8 + lda GetEOFGS+6 + sta ReadGS+10 + + jsl GSOS ; Read File Content + dw $2012 + adrl ReadGS + bcs :openReadErr + +:closeFile jsl GSOS ; Close File + dw $2014 + adrl CloseGS + clc + lda GetEOFGS+4 ; File Size + rts + +:openReadErr jsr :closeFile + nop + nop + + PushWord #0 + PushLong #msgLine1 + PushLong #msgLine2 + PushLong #msgLine3 + PushLong #msgLine4 + _TLTextMountVol ; actualname is TLTextMountVolume + pla + cmp #1 + bne :loadFileErr + brl :openFile +:loadFileErr sec + rts + +msgLine1 str 'Unable to load File' +msgLine2 str 'Press a key :' +msgLine3 str ' -> Return to Try Again' +msgLine4 str ' -> Esc to Quit' + + +OpenGS dw 2 ; pCount + ds 2 ; refNum + adrl ImageName ; pathname + +GetEOFGS dw 2 ; pCount + ds 2 ; refNum + ds 4 ; eof + +ReadGS dw 4 ; pCount + ds 2 ; refNum + ds 4 ; dataBuffer + ds 4 ; requestCount + ds 4 ; transferCount + +CloseGS dw 1 ; pCount + ds 2 ; refNum + +QuitGS dw 2 ; pCount + ds 4 ; pathname + ds 2 ; flags + diff --git a/src/skel.macgen.s b/src/skel.macgen.s new file mode 100644 index 0000000..14e4dc6 --- /dev/null +++ b/src/skel.macgen.s @@ -0,0 +1,39 @@ +_TLStartUp MAC + Tool $201 + <<< +_MMStartUp MAC + Tool $202 + <<< +_MMShutDown MAC + Tool $302 + <<< +_NewHandle MAC + Tool $902 + <<< +_UnPackBytes MAC + Tool $2703 + <<< +PushLong MAC + IF #=]1 + PushWord #^]1 + ELSE + PushWord ]1+2 + FIN + PushWord ]1 + <<< +PushWord MAC + IF #=]1 + PEA ]1 + ELSE + IF MX/2 + LDA ]1+1 + PHA + FIN + LDA ]1 + PHA + FIN + <<< +Tool MAC + LDX #]1 + JSL $E10000 + <<< diff --git a/src/torus.s b/src/torus.s new file mode 100644 index 0000000..2fd0a20 --- /dev/null +++ b/src/torus.s @@ -0,0 +1,29 @@ +Drawtorus ASL ; A=Sprite Number ($0000-$003C) + TAX ; Y=Target Screen Address ($2000-$9D00) + LDA torusNum,X ; Relative Sprite Number Table + JMP (torusBank,X) ; Bank Number Table + +torusNum HEX 1600,1400,0E00,1300,0400,0100,0600,1200 + HEX 0200,0F00,0800,1800,1700,1F00,1E00,2200 + HEX 2700,2600,3000,2D00,3600,3500,3C00,3700 + HEX 3100,2F00,2800,2300,2000,1500,1000,0700 + HEX 0C00,0D00,0300,0000,0500,0B00,0A00,0900 + HEX 1100,1A00,1900,1B00,1D00,2100,2A00,2400 + HEX 2900,2C00,2E00,3300,3900,3B00,3800,3400 + HEX 3200,2B00,2500,1C00,3A00 + +torusBank DA torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00 + DA torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00 + DA torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00 + DA torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00 + DA torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00 + DA torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00 + DA torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00,torusBank00 + DA torusBank00,torusBank00,torusBank00,torusBank00,torusBank00 + +torusBank00 JSL $AA0000 + PHK + PLB + RTS + +*------------------------------------------------