Jump to content
IGNORED

Loading with music...


Recommended Posts

do not share a source of this example because it will be part of one of my next projects. but its rather simplem, in Fox's inflate lib replace:

 

lda (inputPointer),y

inw inputPointer

 

by this:

 

stx inputPointer

jsr xBIOS_GET_BYTE

ldx inputPointer

ldy #$00

 

so decompresor fetch data from current position in opened file

 

 

source of decompresor part of file on fly do like this:

 

			icl "inflate.asm"

			org $0600
init		
@			 lda vcount
			bne @-

			lda #$0f		; gr.15
			jsr $ef9c	 ; illegal call

			lda SAVMSC
			sta inflate_zp+2		; destination in memory
			lda SAVMSC+1
			sta inflate_zp+3
			jsr inflate			 ; now fetch data from current position in file

			jmp xBIOS_BINARY_LOAD ; this is nice,
									; do binary load from current position in file *

			ini init


			opt h-l+o+			 ; compressed data without binary file header
			ins 'mostek.df7'
			opt h+l+o+


			org $0600			 ; *
start		 jmp start			 ; run adres

			run start

  • Like 1
Link to comment
Share on other sites

xxl, Tezz... thanks... exactly what I am looking for...

 

Tezz, while having DLIs running... is there anything I need to know or does xbios take the rest? So... more to say... f.e. for Gridrunner I could simply paste your G2F Screen before the main screen? INIT into the G2F and exit it with DLIs on? Or where is the magic? any simple ASM example?

 

it is for an production of mine and could be used for Gridrunner, too.

Link to comment
Share on other sites

The g2f needs to be pulled apart and reworked for your ini segment.

 

We can load low with xbios...

 

; XBIOS Memory Map:

 

; $0000-$00ff

; $0100-$01ff

; $0200-$06ff

; $0700-$07ff ; buffer used during I/O - relocatable (can be anywhere)

; $0800-$0bff ; xBios

; $0c00-$cfff

; $d000-$d7ff ; Atari HW

; $d800-$ffff

 

 

 

initial dma off segment..

 

  	 org $c00

load        lda:cmp:req $14
       sei
       mva #0 nmien
       sta dmactl
       sta $22f
       mva #$ff portb
       rts

       ini load

;-----------------------------------------------------------------------------

       org $480

launch

; game setup/run procs   ...(I have mine exo packed so we have plenty of spare mem for the loading pic/intro 

 

 

rework the g2f...

 


pic        mva #>pmg pmbase
       mva #3 pmcntl
       mva #0 colbak
       mva #$fe portb        ; *if required
       mwa #nmi $fffa

; depack rle pmg data here ..

       mva #$c0 nmien
       rts            ; end segment

;-----------------------------------------------------------------------------

fonts, screen ram, antic program, pmbase etc. below main prog exo

 

 

manually edit the dli ...

 

; dli saves/restores via self mod rather than zp. *Do not use x or y regs to save time... drop any unnessasary wsyncs

       .align $100        ; page align  (keep an eye on crossing pages if it's a long dli)

dli1        sta saveA1+1
       sta wsync
       mva #$14 color0
       mva #$2a color1
       mva #$86 color2
       mva #<dli2 dlinext
saveA1        lda #0
       rti
dli2        sta saveA2+1
       sta wsync
       mva #>fnt1 chbase
       mva #<dli3 dlinext
saveA2        lda #0
       rti

etc..

 

 

; vbl saves/restores via self mod again. only Acc is required

nmi        sta vbisaveA+1
       bit nmist
       bpl vbl
       jmp dli1
dlinext        equ *-2

vbl        sta nmist

; initial register changes here ..

*g2f sets all initial registers at vbl so move the registers that are not changed during dli to the pic setup instead

       mwa #antic dlptr
       mva #$3e dmactl
       mwa #dli1 dlinext

vbisaveA    lda #0
       rti

;----------------------------------------------------

; rle sprite data here

;----------------------------------------------------

       ini pic

;----------------------------------------------------

       org $xxx ; above intro loader

insert game exo data here

;----------------------------------------------------

       run launch

;----------------------------------------------------

Edited by Tezz
Link to comment
Share on other sites

Here's the DLI raster bars with music player and picture depacking during disk load...

 

The music player is lifted from the Bitter Reality demo loader btw, it was ideal for putting an example together.

XBIOS takes care of AUDCTL.

 

xIRQEN		  equ $bf6	    ; IRQ usera  xx00 0xxx
xAUDCTL		 equ $bf8	    ; dla AUDCTL

xBIOS						   equ $800
xBIOS_MAGIC					 equ xBIOS
xBIOS_VERSION				   equ xBIOS+$02
xBIOS_RENAME_FILE			   equ xBIOS+$03
xBIOS_LOAD_FILE				 equ xBIOS+$06
xBIOS_OPEN_FILE				 equ xBIOS+$09
xBIOS_LOAD_DATA				 equ xBIOS+$0c
xBIOS_WRITE_DATA			    equ xBIOS+$0f
xBIOS_LOAD_DIR				  equ xBIOS+$12
xBIOS_GET_BYTE				  equ xBIOS+$15
xBIOS_PUT_BYTE				  equ xBIOS+$18
xBIOS_FLUSH_BUFFER			  equ xBIOS+$1b
xBIOS_SET_LENGTH			    equ xBIOS+$1e
xBIOS_NOTE					  equ xBIOS+$21
xBIOS_POINT					 equ xBIOS+$24
xBIOS_SET_PARAMS			    equ xBIOS+$27
xBIOS_SET_CURRENT_DEVICE	    equ xBIOS+$2A
xBIOS_CHANGE_DIRECTORY		  equ xBIOS+$2D
xBIOS_BINARY_LOAD			   equ xBIOS+$30

bars		    equ $00
barcol		  equ $f0            ;  8 bytes
speed		   equ $fb
HTD_IN		  equ $fc ; fd
zegar		   equ $fe
line_count	  equ $ff
tlo			 equ $0600

font_base	   equ $e000

       opt h+o+l+

       icl 'equates'

       org $c00

antic        
	    :1   .byte $70
			 .byte $40+$0d+$80,<ekr,>ekr
	    :100 .byte $0d+$80
		    .byte $10,$06+$40,<text,>text
		    .byte $41,<antic,>antic

sine        dta sin(46,46,128,0,255)

ekr	 equ $2000

text		   .byte d'test ',d'TEST test	  '*


start        sei
       lda #0
		    sta nmien
       sta dmactl
		    sta line_count
		    
		    tax
@			   sta $00,x
		    dex
		    bne @-
		    
		    lda #$ff
		    ldy #$2f
_nxte1		  sty _nxte+2
_nxte		   sta $2000,x
		    dex
		    bne _nxte
		    dey
		    cpy #$1f
		    bne _nxte1
		    
       lda #$fe
		    sta portb
		    jsr copy_fnt
       lda #<NMI
		    sta $fffa
		    lda #>NMI
		    sta $fffb
       lda #$18
       sta barcol
       lda #$38
       sta barcol+1
       lda #$58
       sta barcol+2
       lda #$78
       sta barcol+3
       lda #$98
       sta barcol+4
       lda #$b8
       sta barcol+5
       lda #$d8
       sta barcol+6
       lda #$f8
       sta barcol+7
       mwa #antic dlptr
       lda #>font_base
		    sta chbase
		    ldx #0   ;94 ;23
barbackgnd    txa ;lda #4            ; reset logo background colour on all 24 scanlines
		    lsr @
		    lsr @
		    lsr @
		    ;lsr @
		    ora #$01
		    sta bars,x
		    sta tlo-6,x
       inx
		    cpx #100
       bne barbackgnd
@			   sta tlo-6,x
		    inx
		    cpx #106
		    bne @-
		    
		    lda #$0f
		    sta colpf0

@			   lda vcount
		    bne @-
       mva #34 dmactl
       mva #$C0 nmien
		    
rle_depacker
loop		   jsr getByte
		    cmp #0
		    beq stop
		    lsr @
		    tay
lp0   		 jsr getByte
lp1   		 sta $2000
outputPointer    equ *-2
		    inw outputPointer
		    dey
_bpl		    bmi loop

		    bcs lp0
		    bcc lp1

getByte   		 sty _sY+1
		    php
		    jsr xBIOS_GET_BYTE
_sY			 ldy #$ff
		    plp
		    rts

stop		    jmp xBIOS_BINARY_LOAD
;			    rts
		    


copy_fnt	    ldx #3
		    ldy #0
_cfont		  inc portb	   ; ff
_csrc		   lda $e000,y
		    dec portb	   ; fe
_cdst		   sta font_base,y
		    dey
		    bne _cfont
		    inc _csrc+2
		    inc _cdst+2
		    dex
		    bpl _cfont
		    rts
		    
; -----------------------------------
dli1        sta saveA1+1
		    stx saveX1+1
		    ldx line_count
       lda bars,x
		    inc line_count
       sta wsync
       sta colbak
		    
		    lda tlo,x ;#$04
       sta bars,x
saveA1		  lda #0
saveX1		  ldx #0
       rti

; -----------------------------------

NMI        bit nmist
       bpl VBL
       jmp dli1
dli_select    equ *-2

VBL        sta vbisaveA+1
       stx vbisaveX+1
       sty vbisaveY+1

		    jsr xBIOS_NOTE
		    sty HTD_IN
		    stx HTD_IN+1

		    ldy #16
		    lda HTD_IN+1
		    jsr puthex
		    lda HTD_IN
		    jsr puthex

		    inc zegar

		    lda #0
		    sta line_count

		    ldy #3				  ; 7
_nxtbar        lda zegar
		    clc
		    adc przesuniecie,y
		    tax
       lda sine,x
		    tax
       lda barcol,y		  
       sta bars,x		  ;1000
       sta bars+6,x	    ;1000
       ora #2
       sta bars+1,x	    ;1010
       sta bars+5,x	    ;1010
       eor #6
       sta bars+2,x	    ;1100
       sta bars+4,x	    ;1100
       ora #2
       sta bars+3,x	    ;1110

		    dey
		    bpl _nxtbar

       lda speed        ; simple audio seq
       bne wp

loadpat        ldx #0
       lda pat,x
       bmi pass
       asl @
       asl @
       asl @
       asl @
       sta wp+1
pass        inx
       txa
       and #$3f
       sta loadpat+1

wp        ldx #0
       lda ins,x
       sta audc1
       lda frq,x
       sta audf1
       inc wp+1

       dec speed
       bpl pass2
       lda #5
		    sta speed
wp1        lda #$20		   ;0010 0000
       sta pass2+1
       eor #$60		   ;0110 0000
       sta wp1+1

pass2        ldx #0
       lda ins,x
       sta audc2
       inc pass2+1



vbisaveA    lda #0
vbisaveX    ldx #0
vbisaveY    ldy #0
       rti

puthex		  pha
		    lsr @
		    lsr @
		    lsr @
		    lsr @
		    jsr nibble
		    pla
		    and #$0f
nibble		  cmp #$0a
		    sed
		    adc #$10
		    cld
		    sta text,y
		    iny
		    rts


przesuniecie    .byte 42,36,30,24,18,12,6,0


ins        dta $0F,$AF,$AC,$A7,$A2,$00,$04,$A3
       dta $22,$21,$A1,$00,$00,$00,$00,$00
		    
       dta $AF,$AF,$09,$07,$05,$04,$04,$03
       dta $03,$03,$02,$02,$02,$01,$01,$00
		    
       dta $87,$84,$83,$82,$81,$00,$00,$00
       dta $00,$00,$00,$00,$00,$00,$00,$00
		    
       dta $84,$84,$84,$84,$84,$84,$83,$83
       dta $83,$83,$82,$82,$81,$81,$00,$00
		    
       dta $83,$82,$81,$81,$81,$00,$00,$00
       dta $00,$00,$00,$00,$00,$00,$00,$00

frq        dta $04,$C0,$D0,$E0,$F0,$00,$04,$C0
       dta $D0,$E0,$F0,$00,$00,$00,$00,$00
       dta $98,$A8,$03,$03,$03,$03,$03,$03
       dta $03,$03,$03,$03,$03,$03,$03,$03
       dta $00,$00,$00,$00,$00,$00,$00,$00
       dta $00,$00,$00,$00,$00,$00,$00,$00
       dta $00,$00,$00,$00,$00,$00,$00,$00
       dta $00,$00,$00,$00,$00,$00,$00,$00

pat        dta $00,$80,$00,$80,$01,$80,$00,$00
       dta $80,$00,$00,$80,$01,$80,$03,$80
       dta $00,$80,$00,$80,$01,$80,$02,$02
       dta $00,$80,$01,$01,$80,$00,$03,$80
       dta $00,$80,$00,$80,$01,$80,$00,$00
       dta $80,$00,$00,$80,$01,$80,$03,$80
       dta $00,$00,$00,$80,$01,$00,$00,$80
       dta $00,$80,$01,$01,$80,$00,$01,$00


       ini start        ; nmi loader intro segment

 opt h-
 org *
		    ins 'loading.rle'
 opt h+

       org $3000

;			    ins 'loading.mic',0,$fc8
		    
   :$7000    .byte $ff        ; create 28k for false loading of data

run_adr        jmp run_adr        ; endless loop

		    run run_adr

Link to comment
Share on other sites

  • 2 months later...

@Tezz

 

I am throwing stuff together for Silly Venture and wanted to use xbios... so actually... what do I need to do in terms of using xbios?

 

simply use the ATR? and put my demo parts on the disc? can I hide the directory or at least put all data files into folders?

 

Sorry, but XXL's descritptions are too advanced for me and the translator does not work properly :D

 

or alternative is to have 1 huge XEX file where each part exits with RTS ("back to dos").

Link to comment
Share on other sites

rather translator does not work properly. what do you want me to explain about using xB?


> Can I hide the directory or at least put all data files into folders?


yes, you can put all data files into subdirectory, but why hide directory? it is possible, but regular DOS will not be able to copy these files.

Link to comment
Share on other sites

xxl:

 

in an ideal world my scenario:

 

booting ATR will boot automaticly xbios. after loading xbios it will load my files automaticly... and in my demo (maybe 1 long exe-file) I will exit each parts simply with RTS and xbios continues to load the segments until next INI/RUN as normal game-dos will do.

 

why hiding the directory? because it is a demo and will only run with xbios help? --> look at the Joyride-Demo-Directory ;=)

Link to comment
Share on other sites

as xxl says you have every option with his xb, you can have individual files in subdirectories, you can also autorun to avoid displaying the xb menu, or like you said you can create a single segmented executable :)

 

btw .. @ xxl what did you use to lz4 pack your gfx data?

Link to comment
Share on other sites

and I want to use xbios because of the 61kb feature and not using IRQ/NMIs so I can use DLIs ;)

It really is the best option, I'm using it for everything I'm working on. Thanks to the xb library we no longer need to write our own custom loaders.

 

With multi-loads without any gfx display/music duing loading etc. I will also create executables for modern high speed storage devices.

Link to comment
Share on other sites

It really is the best option, I'm using it for everything I'm working on. Thanks to the xb library we no longer need to write our own custom loaders.

 

With multi-loads without any gfx display/music duing loading etc. I will also create executables for modern high speed storage devices.

 

Only disadvantage is that you have to use ATR and not XEX anymore. :(

However, for my next game (if ever) I use xBIOS as well. maybe even for the ExtendedEdition of "HeliCave" for savegames.

Link to comment
Share on other sites

> booting ATR will boot automaticly xbios. after loading xbios it will load my files automaticly...




this automatically boot xB.


or if you want make your own .atr up to 16MB with subdirectories, here are boot loaders and xB:






use what you want


now, copy your demo as "xautorun" - this is autorun filename for xbios



> and in my demo (maybe 1 long exe-file) I will exit each parts simply with RTS and xbios continues to load the segments until next INI/RUN as normal game-dos will do.



yes, of course. if you "kill" stack then use "jmp xBIOS_BINARY_LOAD" instead "rts" to load next part. OS can by off and all zeropage utilize by your program all the time. you can move back/forward "file pointer" and boot from different part of your file either.



> why hiding the directory? because it is a demo and will only run with xbios help? --> look at the Joyride-Demo-Directory ;=)


as you want... xB use all 256 chars for file/directory names - use "xBIOS_RENAME_FILES" ;-) or... delete VTOC or... use non standard directory place ;-)... there are many possibilities



> what did you use to lz4 pack your gfx data?



for windows


> I will also create executables for modern high speed storage devices.


and cartridges...



> maybe even for the ExtendedEdition of "HeliCave" for savegames.


look at how DeathchaseXE save scores :-) in DC file - you can rename or move game to another directory or even on cart and this function will work.

Edited by xxl
Link to comment
Share on other sites

sounds really cool...

 

@Tezz

 

what do you mean "creating exe" files for modern high speed devices?

 

@xxl

 

btw. how is the SIO working internally? as you are not using any IRQ/NMI how are you talking to all the different devices? by "polling" pokey? but how do you get the different speeds then?

Link to comment
Share on other sites

@Tezz

 

what do you mean "creating exe" files for modern high speed devices?

Just regular segmented executables and/or separate files without anything actively running during loading as we are able to do disk based at standard 19200 baud.

Link to comment
Share on other sites

thanks xxl, I added the LZ4 compressed picture to the Chimera NTSC fixed version tonight.

http://www.youtube.com/watch?v=-woXW5v6-bI

 

I'm working on finishing off Chimera+ at the moment which will include a complete rewrite of the screen and sprite drawing procedures with the method Shahid used on the other 8-bit platforms which will significantly optimise game play performance. I'm adding in the missing features also such as the samples and the Rob Hubbard music with a recreation of the c64 title screen, directional joystick controls, independently coloured spaceman sprite and the hi-res loading picture that was included on the other platforms also.

Edited by Tezz
  • Like 1
Link to comment
Share on other sites

Tezz... regarding the LZ4 picture... well... ;) are you sure to build the screen up like loading from tape scanline by scanline? ;)

yea I think it's ok to see the screen progress on during loading as it was most often with the Speccy and c64, it's something slightly more interesting then having a blank screen until the pic has fully loaded I guess. The cassette loader (iirc) progressed on shifting data from the centre of the display. It wasn't often for cassette releases to have a loading pic on the A8.

This will just be for this ntsc patched version of the original release of course as the revamp will have the rastered hi-res pic in a segmented and packed executable.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...