diff options
| -rw-r--r-- | Makefile | 17 | ||||
| -rw-r--r-- | bank7.s | 29 | ||||
| -rw-r--r-- | help.txt | 2 | ||||
| -rw-r--r-- | newtitle.s | 72 | ||||
| -rw-r--r-- | taipan.c | 2 | 
5 files changed, 85 insertions, 37 deletions
@@ -254,7 +254,7 @@ mkcart: mkcart.c  # via "JSR $0400".  romable_taimain.raw: $(TAIMAIN_C_SRC) $(TAIMAIN_ASM_SRC) $(TAIMAIN_HDRS)  	rm -f taimain.xex -	$(MAKE) TAIMAIN_ADDR=0x3ff EXTRACFLAGS="-Wl -D__AUTOSTART__=1 -Wl -D__EXEHDR__=1 -DCART_TARGET=1 --asm-define CART_TARGET=1" taimain.xex +	$(MAKE) FONT_ADDR=0x9c00 TAIMAIN_ADDR=0x3ff EXTRACFLAGS="-Wl -D__AUTOSTART__=1 -Wl -D__EXEHDR__=1 -DCART_TARGET=1 --asm-define CART_TARGET=1" taimain.xex  	tail -c+2 taimain.xex > romable_taimain.raw  	rm -f taimain.xex @@ -270,10 +270,13 @@ fill512:  blankbank:  	perl -Mbytes -e 'print chr(0xff) x 8192' > blankbank -splitrom.raw.0: -splitrom.raw.1: -splitrom.raw.2: -splitrom.raw.3: +splitrom.raw.0: splitrom.raw.3 + +splitrom.raw.1: splitrom.raw.3 + +splitrom.raw.2: splitrom.raw.3 + +splitrom.raw.3: romable_taimain.raw  	split -b 7680 -a 1 -d romable_taimain.raw splitrom.raw.  bank0: splitrom.raw.0 fill512 @@ -288,7 +291,7 @@ bank2: splitrom.raw.2 fill512  bank3: splitrom.raw.3 bank3.s taifont  	cl65 -l bank3.lst -m bank3.map -t none -o bank3 bank3.s -bank7: bank7.s titledata.dat +bank7: bank7.s titledata.dat ver.dat help.dat newtitle.s  	cl65 -l bank7.lst -m bank7.map -t none -o bank7 bank7.s  taipan.rom: bank0 bank1 bank2 bank3 bank7 blankbank @@ -312,7 +315,7 @@ taipan.cart: taipan.rom mkcart  # Obligatory clean and distclean rules.  clean: -	rm -f *.o *.lst convfont *.xex AUTORUN.SYS taipan.atr ver.dat help.dat tags cartmsg.dat +	rm -f *.o *.lst convfont *.xex AUTORUN.SYS taipan.atr ver.dat help.dat tags cartmsg.dat splitrom.raw.* taipan.rom taipan.cart bank[0-9] fill512 blankbank romable_taimain.raw  distclean: clean  	rm -f *~ core .*.swp 1.* 2.* 1 2 3 map map.* *.map a b c foo bar baz comptitle.s comptitle.dat @@ -10,10 +10,12 @@ codedest = $0400  cart_trailer = $bffa   .org $a000 ; left cartridge -titledata: +screendata:   .incbin "titledata.dat" -dlist: + .res $44, $ff ; fudge factor, keep the DL from crossing a 1K boundary +CART_TARGET = 1 + .include "newtitle.s"  ; copy 7680 bytes from $8000-$9dff to (destptr).  ; on exit, destptr points to the next 7680 byte chunk. @@ -36,7 +38,7 @@ copy_30_pages:  init:   rts -start: +cartstart:  ; turn off ANTIC DMA to speed up copying to RAM   lda #0   sta SDMCTL @@ -63,23 +65,22 @@ start:   ; leave bank 3 enabled, as it has our custom font in it  ; set up display list - lda #34 - sta SDMCTL - lda #>font - sta CHBAS - ;lda $ff - ;sta CH -;@wait4key: - ;cmp CH - ;beq @wait4key - jsr $0400 + ;lda #34 + ;sta SDMCTL + ;lda #>font + ;sta CHBAS + lda #1 + sta COLDST ; System Reset = reboot + jsr start ; from newtitle.s + jsr $0400 ; run the game (romable_taimain) + jmp cartstart ; redisplay title screen if "play again? N"   .if * > cart_trailer    .fatal "bank7 code too large"   .endif   .res cart_trailer - *, $ff - .word start ; entry point + .word cartstart ; entry point   .byte 0     ; 0 = cartridge present   .byte 4     ; init and run the cart, don't boot the disk, non-diagnostic   .word init  ; init address (just an RTS) @@ -1,4 +1,4 @@  \B:Change BG Color       \E\s\c:more  \T:Change Text Color     \E\s\c:more -\S:Sound [now \O\N ]       \E\s\c:more +\S:Sound (now \O\N )       \E\s\c:more  \S\p\a\c\e/\R\e\t\u\r\n:Start Game \E\s\c:more @@ -2,8 +2,23 @@  ; cl65 -o newtitle.xex -t none newtitle.s  ; It contains only an init routine, no run address. + .ifdef CART_TARGET +origin = * + .else   .include "atari.inc" + ; where our screen was loaded (see newtitle.pl) +;screendata = $2400 + + ; homebrew atari xex header + .word $ffff + .word origin + .word end-1 + +; .org $a800 + .org origin + .endif +   ; location sound code will look at to see whether sound   ; is disabled (0 = enabled, !0 = disabled). If you   ; change this here, change it in sounds.h also! @@ -16,21 +31,17 @@ fontsave = $03c1  color1save = $03c2  color2save = $003c3 - ; where our screen was loaded (see newtitle.pl) -;screendata = $2400 - - ; homebrew atari xex header - .word $ffff - .word origin - .word end-1 - -; .org $a800 - .org origin -  version:   .incbin "ver.dat" + .ifdef CART_TARGET +dl_ram = $7000 +help_lms = dl_ram + 1 +help = $7010 +help_rom: + .else  help: + .endif   .incbin "help.dat"  helphitbl: @@ -49,6 +60,11 @@ helplotbl:   .byte <(help+96)   .byte 0 + .ifdef CART_TARGET +help_size = * - help_rom + .out .sprintf("help_size == %x", help_size) + .endif +  colorchoices:   .byte $c0,$10,$00  colorcount = (*-colorchoices)-1 @@ -78,7 +94,7 @@ filler:  totalscanlines = 184 ; aka image size / $20  topscanlines = (($1000 - (screendata .mod $1000)) / $20) -bottomscanlines = totalscanlines - topscanlines +bottomscanlines = (totalscanlines - topscanlines)   .out .sprintf("topscanlines = %d", topscanlines)   .out .sprintf("bottomscanlines = %d", bottomscanlines) @@ -116,12 +132,16 @@ dlist:   .endrepeat   dl3byte $0f | $40, screendata+(topscanlines * $20) ; Hit 4K boundary, LMS again - .repeat bottomscanlines + .repeat bottomscanlines - 1    dlbyte $0f ; 55 more scanlines of mode 8   .endrepeat + .ifdef CART_TARGET +  dl3byte $01, dl_ram ; DL is mainly in ROM, jump to RAM (extra scanline) + .else   dl3byte $02 | $40, version ; LMS, 1 line of GR.0 for the version  help_lms = * - 2   dl3byte $41, dlist ; JVB, jump & wait for vblank + .endif   .out .sprintf("dl start $%x, end $%x, size %d", dlist, *, (* - dlist) + 1) @@ -134,6 +154,30 @@ sounddisp = help + 78   ; executable code here  start: + + .ifdef CART_TARGET +  lda #$42         ; finish display list. this part has to be in RAM. +  sta dl_ram +  lda #<version +  sta help_lms +  lda #>version +  sta help_lms+1 +  lda #$41 +  sta help_lms+2 +  lda #<dlist +  sta help_lms+3 +  lda #>dlist +  sta help_lms+4 + +  ldx #0 +@hsloop: +  lda help_rom,x +  sta help,x +  inx +  cpx #help_size +  bne @hsloop + .endif +   ; save old color registers and font addr.   lda CHBAS   sta fontsave @@ -326,6 +370,8 @@ now_on:   .out .sprintf("code ends at $%x", *)  end: + .ifndef CART_TARGET   .word INITAD   .word INITAD+1   .word start + .endif @@ -122,7 +122,6 @@ extern void __fastcall__ clear_lorcha(int which);  /* used to set the background/text colors here, but now the  	title screen does it (newtitle.s) */  void atari_text_setup() { -#ifndef CART_TARGET  	jsleep(1);  	POKE(560, PEEK(212)); // restore the  	POKE(561, PEEK(213)); // display list @@ -130,7 +129,6 @@ void atari_text_setup() {  	POKE(559, 34);        // turn on the screen (normal playfield)  	jsleep(1);  	POKE(756, FONT_ADDR / 256); // use our custom font -#endif  	POKE(731, 1);    // disable keyclick on XL/XE (does nothing on 400/800)  }  | 
