From d72ca57181f0a1a5728ccd93a93f1241428893c0 Mon Sep 17 00:00:00 2001 From: pkali Date: Mon, 19 Sep 2022 08:02:27 -0400 Subject: [PATCH] 5200 compiles --- lib/5200MACRO.ASM | 146 +++++++++++++++++++++++++++++++++++ lib/5200SYS.ASM | 38 +++++++-- lib/{macro.hea => MACRO.ASM} | 0 scorch.asm | 71 +++++++++-------- scorch.xex | Bin 48681 -> 31941 bytes 5 files changed, 217 insertions(+), 38 deletions(-) create mode 100644 lib/5200MACRO.ASM rename lib/{macro.hea => MACRO.ASM} (100%) diff --git a/lib/5200MACRO.ASM b/lib/5200MACRO.ASM new file mode 100644 index 0000000..58431b2 --- /dev/null +++ b/lib/5200MACRO.ASM @@ -0,0 +1,146 @@ +;------------------------------------- + .MACRO ROLW + ROL :1 + ROL :1+1 + .ENDM +;------------------------------------- + .MACRO ASLW + ASL :1 + ROL :1+1 + .ENDM +;------------------------------------- + .MACRO RORW + ROR :1+1 + ROR :1 + .ENDM +;------------------------------------- + .MACRO LSRW + LSR :1+1 + ROR :1 + .ENDM + +;------------------------------------- + .MACRO VMAIN +; VMAIN #WORD,interrupt.vector +; interrupt.vector: +; 0 - VIMIRQ +; 1 - TIMCNT1 +; 2 - TIMCNT2 +; 3 - TIMCNT3 +; 4 - TIMCNT4 +; 5 - TIMCNT5 +; 6 - VVBLKI +; 7 - VVBLKD +; 8 - TIMVEC1 +; 9 - TIMVEC2 +; Initialises Vertical Blank Interrupts +; (works only with system interrupts ON) +;---------- +; on 5200 it sets up deferred VBL ONLY for now + sei + lda #$00 ;Disable all interruptes + sta nmien + sta irqen + +@ lda vcount + bne @- + mwa #:1 VVBLKD + lda #$40 ;Enable IRQ interrupts + sta pokmsk + sta irqen + cli + + .ENDM +;------------------------------------- + .MACRO VDLI +; VDLI #WORD +; Initialises Display List Interrupts + mwa #:1 VDSLST + mva #$C0 NMIEN + .ENDM +;------------------------------------- + .MACRO halt +?stop + lda RANDOM + and #$05 + sta COLBAK + jmp ?stop + .ENDM +;------------------------------------- + .MACRO KEY +; KEY +; waits for releasing and pressing "any key" + + .ENDM +;------------------------------------- + .MACRO WAIT +; WAIT +; waits one frame (1/50 s(PAL) or 1/60s(NTSC)) +?zero LDA VCOUNT + beq ?zero + bpl ?WA + sbc #10 ; last lines correction +?WA cmp VCOUNT + beq ?WA + bcc ?WA +?WFRAME cmp VCOUNT + beq ?nowait + bcs ?WFRAME +?nowait + .ENDM +;------------------------------------- + .macro negw + ; negate the given word (0-a) +;------------------------------------- + sec + lda #$00 + sbc :1 + sta :1 + lda #$00 + sbc :1+1 + sta :1+1 + .endm +;------------------------------------- + .macro randomize + ;usage: randomize floor ceiling + ;returns (in A) a random .byte between "floor" and "ceiling" + .if :2 < :1 + .error "floor higher than ceiling" + .endif +?rand + lda random + cmp #:1 ;floor + bcc ?rand + cmp #:2+1 ;ceiling + bcs ?rand + .endm +;------------------------------------- + .macro phx + txa + pha + .endm +;------------------------------------- + .macro phy + tya + pha + .endm +;------------------------------------- + .macro plx + pla + tax + .endm +;------------------------------------- + .macro ply + pla + tay + .endm +;------------------------------------- + .macro pause + ;waits :1 number (byte) of frames + ldx #:1 +?PAUSELOOP + wait + dex + bne ?PAUSELOOP + .ENDM + diff --git a/lib/5200SYS.ASM b/lib/5200SYS.ASM index 5ae6b4a..017dbab 100644 --- a/lib/5200SYS.ASM +++ b/lib/5200SYS.ASM @@ -2,6 +2,8 @@ ;* ATARI 5200 CONSOLE * ;* SYSTEM EQUATES * ;**************************************************************************** +; based on https://web.archive.org/web/20200831200348/http://www.atarimuseum.com/videogames/consoles/5200/conv_to_5200.html +; ; OS VARIABLES FOR 5200 ; ; PAGE 0 @@ -9,14 +11,9 @@ POKMSK = $00 ;pokmsk at $00 on Atari 5200 instead of $10 on Atari RTCLOK = $01 ;Actually $01/$02 CRITIC = $03 ATRACT = $04 ;attact at $04 on Atari 5200 instead of $4D on Atari XL - -; PAGE 2 DLPTRS = $05 ;sdlstl at $05/$06 on Atari 5200 instead of $230 on Atari XL DMACTLS = $07 ;sdmactl at $07 on Atari 5200 instead of $22f on Atari XL SSKCTL = skctl ;There is no shadow on Atari 5200 -STICK0 = $278 ;There is no stick0 but we will make the analog stick look like a digital one and store it here -STRIG0 = $284 ;There is no strig0 but we will make this the shadow of the TRIG0 ($c010) of GITA - PCOLR0 EQU $08 ;P0 COLOR PCOLR1 EQU $09 ;P1 COLOR PCOLR2 EQU $0a ;P2 COLOR @@ -27,6 +24,36 @@ COLOR2 EQU $0e COLOR3 EQU $0f COLOR4 EQU $10 COLBAKS EQU COLOR4 +PADDL0 EQU $11 +PADDL1 EQU $12 +PADDL2 EQU $13 +PADDL3 EQU $14 +PADDL4 EQU $15 +PADDL5 EQU $16 +PADDL6 EQU $17 +PADDL7 EQU $18 +STICK0 = $19 ;There is no stick0 but we will make the analog stick look like a digital one and store it here +STRIG0 = $1a ;There is no strig0 but we will make this the shadow of the TRIG0 ($c010) of GTIA +chbas = $1b ;There is no strig0 but we will make this the shadow of the CHBASE + +; PAGE 2 +VIMIRQ EQU $0200 ;IMMED IRQ VECTOR +VVBLKI EQU $0202 ;IMM VBLK NMI VECTOR +VVBLKD EQU $0204 ;DEF VBLK NMI VECTOR +VDSLST EQU $0206 ;DSP LIST NMI VECTOR +VKEYBD EQU $0208 ;POKEY KB IRQ VECTOR +VKEYCNT EQU $020A ;Keypad routine continuation vector +BRKKY EQU $023C ;BREAK KEY VECTOR +VBREAK EQU $020E ;BRK INST IRQ VECTOR +VSERIN EQU $0210 ;POKEY INPUT RDY IRQ +VSEROR EQU $0212 ;POKEY OUTPUT RDY +VSEROC EQU $0214 ;POKEY OUTPUT DONE +VTIMR1 EQU $0216 ;POKEY TIMER 1 IRQ +VTIMR2 EQU $0218 ;POKEY TIMER 2 IRQ +VTIMR4 EQU $021A ;POKEY TIMER 4 IRQ + + +ROM_SETTINGS = $bfe8 ; game ROM info start (24 bytes total, 20b title, 2b year, 2b start vector) ; HARDWARE REGISTERS @@ -108,6 +135,7 @@ COLPF2 EQU GTIA+$18 COLPF3 EQU GTIA+$19 COLBAK EQU GTIA+$1a PRIOR EQU GTIA+$1b +GPRIOR = PRIOR ; no PRIOR shadow (GPRIOR) VDELAY EQU GTIA+$1c GRACTL EQU GTIA+$1d HITCLR EQU GTIA+$1e diff --git a/lib/macro.hea b/lib/MACRO.ASM similarity index 100% rename from lib/macro.hea rename to lib/MACRO.ASM diff --git a/scorch.asm b/scorch.asm index 091c9d3..e73184c 100644 --- a/scorch.asm +++ b/scorch.asm @@ -5,10 +5,13 @@ ;Warsaw 2000, 2001, 2002, 2003, 2009, 2012, 2013 ;Miami & Warsaw 2022 +;--------------------------------------------------- +.def target = 5200 ; or 800 +;--------------------------------------------------- + OPT r+ ; saves 12 bytes :O -.def target = 800 ;5200 ; or 800 - +;--------------------------------------------------- .macro build dta d"1.15" ; number of this build (4 bytes) .endm @@ -18,8 +21,9 @@ jsr RMTSongSelect .endm +;--------------------------------------------------- icl 'definitions.asm' - +;--------------------------------------------------- .zpvar xdraw .word = $64 ;variable X for plot .zpvar ydraw .word ;variable Y for plot (like in Atari Basic - Y=0 in upper right corner of the screen) @@ -122,17 +126,21 @@ displayposition = modify LineAddress4x4 = temp -;------------------------------- +;----------------------------------------------- +; libraries +;----------------------------------------------- .IF TARGET = 5200 icl 'lib/5200SYS.ASM' + icl 'lib/5200MACRO.ASM' .ELSE icl 'lib/ATARISYS.ASM' + icl 'lib/MACRO.ASM' icl 'artwork/Scorch50.asm' ; splash screen and musix .ENDIF - icl 'lib/macro.hea' - - ; variable declarations in RAM (no code) +;----------------------------------------------- +; variable declarations in RAM (no code) +;----------------------------------------------- ORG PMGraph + $0300 - (variablesEnd - OneTimeZeroVariables + 1) icl 'variables.asm' @@ -142,10 +150,10 @@ WeaponFont ins 'artwork/weapons_AW6_mod.fnt' ; 'artwork/weapons.fnt' + ;----------------------------------------------- ;Screen displays go here to avoid crossing 4kb barrier ;----------------------------------------------- - DisplayCopyRom = * org display, DisplayCopyRom DisplayCopyStart @@ -460,13 +468,6 @@ SettingEnergies jsr SetMainScreen jsr ColorsOfSprites -; lda #90 ; barrel fully erect -; ldx #MaxPlayers-1 -;@ sta previousBarrelAngle,x -; dex -; bpl @- - - jsr drawmountains ;draw them jsr drawtanks ;finally draw tanks @@ -635,11 +636,6 @@ ShootNow jsr Explosion continueMainRoundLoopAfterSeppuku - ;here we clear offensive text (after a shoot) - ;ldy TankNr - ;mva #0 plot4x4color - ;jsr DisplayOffensiveTextNr - AfterExplode jsr SoilDown2 ; allways @@ -659,7 +655,6 @@ NoExistNoFall mvx tempor2 TankNr missed - ; TODO: IS IT OK??? possibly a fix here needed for #56 ldy WeaponDepleted bne @+ ldx TankNr @@ -668,7 +663,6 @@ missed @ ;here we clear offensive text (after a shoot) - ;shit -- it's second time, but it must be like this ldy TankNr mva #$00 plot4x4color jsr DisplayOffensiveTextNr @@ -740,7 +734,6 @@ NoPlayerNoDeath ;clear NoDeathCounter here sta noDeathCounter - ; display defensive text here (well, defensive ; is not the real meaning, it should be pre-death, ; but I am too lazy to change names of variables) @@ -754,7 +747,7 @@ NoPlayerNoDeath inc CurrentResult mva #sfx_death_begin sfx_effect -;RandomizeDeffensiveText + ; RandomizeDeffensiveText randomize talk.NumberOfOffensiveTexts (talk.NumberOfDeffensiveTexts+talk.NumberOfOffensiveTexts-1) sta TextNumberOff ldy TankTempY @@ -1243,7 +1236,16 @@ exitVBL ply plx pla - jmp XITVBV + .IF target = 5200 + pla + tay + pla + tax + pla + rti + .ELSE + jmp XITVBV + .ENDIF .endp ;---------------------------------------------- .proc RandomizeSequence0 @@ -1462,7 +1464,7 @@ Bubble BubbleBobble lda TempResults,x cmp TempResults+1,x - beq nextishigher ; this is to block hangs when 2 same values meet + beq nextishigher ; this is to block hangs when 2 equal values meet bcc nextishigher ;here we must swap values ;because next is smaller than previous @@ -1713,15 +1715,18 @@ MODULEND font4x4 ins 'artwork/font4x4s.bmp',+62 - - .IF target = 5200 - org $bfe8 +;---------------------------------------------- + .IF target = 5200 + .IF * > ROM_SETTINGS-1 + .ERROR 'Code too long to fit in 5200' + .ENDIF + org ROM_SETTINGS ; 5200 ROM settings address $bfe8 ; "01234567890123456789" .byte " SCORCH 5200 v" ;20 characters title build ; " " .byte " " - .byte '22' ;2 characters year + .byte '7A' ;2 characters year .. 1900 + $7A = 2020 .word FirstSTART - .ELSE - run FirstSTART - .ENDIF \ No newline at end of file + .ELSE + run FirstSTART + .ENDIF \ No newline at end of file diff --git a/scorch.xex b/scorch.xex index 10e992788fddbad55839b98c0630e677ba128f45..abeb3f28f5707da9d98fe0e2ebeb9aebbe755bd9 100644 GIT binary patch delta 9187 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 YJ#M06^hkzLl#Ec17_FH3eA~SL18aRQZ2$lO delta 24133 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