xxl Posted June 28, 2014 Share Posted June 28, 2014 (edited) Hi, first example. realtime kefrens during I/O ( online little help http://xxl.atari.pl/?p=1076 ) xBIOS equ $800 xBIOS_MAGIC equ xBIOS xBIOS_VERSION equ xBIOS+$02 xBIOS_RENAME_ENTRY 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_OPEN_CURRENT_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_SET_INIAD equ xBIOS+$21 xBIOS_SET_FILE_OFFSET equ xBIOS+$24 xBIOS_SET_RUNAD equ xBIOS+$27 xBIOS_SET_DEFAULT_DEVICE equ xBIOS+$2A xBIOS_OPEN_DIR equ xBIOS+$2D xBIOS_LOAD_BINARY_FILE equ xBIOS+$30 xBIOS_OPEN_DEFAULT_DIR equ xBIOS+$33 xBIOS_SET_DEVICE equ xBIOS+$36 xBIOS_RELOCATE_BUFFER equ xBIOS+$39 xBIOS_GET_ENTRY equ xBIOS+$3c xBIOS_OPEN_DEFAULT_FILE equ xBIOS+$3f xBIOS_READ_SECTOR equ xBIOS+$42 xBIOS_FIND_ENTRY equ xBIOS+$45 xIRQEN equ xBIOS+$3ea ; User IRQ (1 byte) icl 'atarihw.ah' scr equ $00 _t0 equ $0300 _t1 equ $0400 _t2 equ $0500 opt h+o+l+ org $c00 start_sio lda #$00 sta xIRQEN ; user IRQ jmp xBIOS_SET_DEFAULT_DEVICE ; SIO drive ini start_sio org nmien .byte $00 org irqen .byte $00 org dmactl .byte $00 org portb ; ROM OFF .byte $fe org nmiv .word NMI org dlistl .word mydlist org colpf2 .byte $00 org _t0 sine .byte sin(61,61,255,0,255) org $0020 NMI bit nmist bpl VBL sta sDLIA lda #$AA skip equ *-1 asl @ rol skip bcc faza2 inc D0 lda D1 clc adc #$f9 sta D1 lda _t0 D0 equ *-2 adc _t0 D1 equ *-2 sta _t1l sta _t2l lda sDLIA rti faza2 lda _t1 _t1l equ *-2 sta X1 sta X2 lda scr X1 equ *-1 ora _t2 _t2l equ *-2 sta scr X2 equ *-1 lda #0 sDLIA equ *-1 rti VBL sta sVBIA stx sVBIX ldx #0 a0 equ *-1 dex stx a0 stx D0 ldx #0 a1 equ *-1 dex stx a1 stx D1 ldx #$1f lda #0 @ sta scr,x dex bpl @- lda <mydlist sta DLISTL lda #0 sVBIA equ *-1 ldx #0 sVBIX equ *-1 rti mydlist .byte $4F+$80,<scr,>scr,$00,$4F,<scr,>scr .byte $01,<mydlist,>mydlist start sei ldy #0 _inc lda #$00 sta _t1,y _ror lda #$80 sta _t2,y iny beq @+ lsr @ ror _ror+1 bcc _inc inc _inc+1 bne _inc @ lda #$c0 sta nmien @ lda vcount bne @- lda #$21 sta dmactl rts ini start org $0c00 :$c300 .byte $ff ; create loading of data run_adr lda #$74 sta colbak sta colpf2 _stop jmp _stop ; endless loop run run_adr test.atr Edited June 28, 2014 by xxl 3 Quote Link to comment Share on other sites More sharing options...
Heaven/TQA Posted June 29, 2014 Share Posted June 29, 2014 Cool Quote Link to comment Share on other sites More sharing options...
xxl Posted June 29, 2014 Author Share Posted June 29, 2014 counters during I/O: file offset & segment size. reloc runad for fun. xIRQEN equ xBIOS+$3ea ; User IRQ (1 byte) xSEGMENT equ xBIOS+$3f4 ; Bytes to go in binary file segment (2 bytes) xNOTE equ xBIOS+$3f6 ; File pointer (3 bytes) PUPBT1 equ $033D ;power-up validation byte 1 icl 'atarihw.ah' opt h+o+l+ org $c00 start_sio sei lda #$00 sta nmien sta irqen sta xIRQEN sta dmactl lda #$fe sta portb lda <MyNMI sta nmiv lda >MyNMI sta nmiv+1 lda <mydlist sta dlistl lda >mydlist sta dlisth jsr xBIOS_SET_DEFAULT_DEVICE ; SIO drive ldx >RESETV ldy <RESETV jmp xBIOS_SET_RUNAD ; new runad vector ini start_sio org RESETV .word run_adr ; RUN org PUPBT1 .byte d'xxl' ; let the RESET key works as RESET key org $0000 run_adr lda #$74 sta colbak _stop jmp _stop ; endless loop mydlist :12 .byte $70 .byte $46,<counter,>counter .byte $06 .byte $41,<mydlist,>mydlist counter .byte d'SEGMENT: ' .byte d'FILE OFFSET: ' start sei ldx #3 ldy #0 @ inc PORTB lda $e000,y _csrc equ *-1 dec PORTB sta (_csrc-1),y _cdst equ *-1 dey bne @- inc _csrc dex bpl @- @ lda vcount bne @- lda #$22 sta dmactl lda #$40 sta nmien rts MyNMI sta nmiA sty nmiY inc licz lda #0 licz equ *-1 lsr @ bcc secondnmi firstnmi ldy #16 lda xSEGMENT+1 jsr puthex lda xSEGMENT jsr puthex jmp endnmi secondnmi ldy #20+14 lda xNOTE+2 jsr puthex lda xNOTE+1 jsr puthex lda xNOTE jsr puthex endnmi lda #0 nmiA equ *-1 ldy #0 nmiY equ *-1 rti puthex pha lsr @ lsr @ lsr @ lsr @ jsr nibble pla and #$0f nibble cmp #$0a sed adc #$10 cld sta counter,y iny rts ini start org $0c00 :$c300 .byte $ff test.atr 2 Quote Link to comment Share on other sites More sharing options...
xxl Posted June 30, 2014 Author Share Posted June 30, 2014 simple example of playing music during I/O. but use for this purpose Konop's Delta Music Composer is a better idea. opt h+o+l+ org PUPBT1 .byte d'xxl' ; let the RESET key works as RESET key org $c00 start_sio sei lda #$00 sta nmien sta irqen sta xIRQEN sta dmactl lda #$fe sta portb lda <MyNMI sta nmiv lda >MyNMI sta nmiv+1 lda #$40 sta nmien jmp xBIOS_SET_DEFAULT_DEVICE ; SIO drive MyNMI sta vbisaveA+1 stx vbisaveX+1 speed lda #0 bne wp loadpat ldx #0 lda pat,x bmi pass asl @ asl @ asl @ asl @ sta wp+1 pass inx lda #$3f sax loadpat+1 wp ldx #0 lda ins,x sta audc1 lda frq,x sta audf1 inc wp+1 dec speed+1 bpl pass2 lda #5 sta speed+1 wp1 lda #$20 sta pass2+1 eor #$60 sta wp1+1 pass2 ldx #0 lda ins,x sta audc2 inc pass2+1 vbisaveA lda #0 vbisaveX ldx #0 rti ins .byte $0F,$AF,$AC,$A7,$A2,$00,$04,$A3 .byte $22,$21,$A1,$00,$00,$00,$00,$00 .byte $AF,$AF,$09,$07,$05,$04,$04,$03 .byte $03,$03,$02,$02,$02,$01,$01,$00 .byte $87,$84,$83,$82,$81,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00 .byte $84,$84,$84,$84,$84,$84,$83,$83 .byte $83,$83,$82,$82,$81,$81,$00,$00 .byte $83,$82,$81,$81,$81,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00 frq .byte $04,$C0,$D0,$E0,$F0,$00,$04,$C0 .byte $D0,$E0,$F0,$00,$00,$00,$00,$00 .byte $98,$A8,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03 .byte $00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00 pat .byte $00,$80,$00,$80,$01,$80,$00,$00 .byte $80,$00,$00,$80,$01,$80,$03,$80 .byte $00,$80,$00,$80,$01,$80,$02,$02 .byte $00,$80,$01,$01,$80,$00,$03,$80 .byte $00,$80,$00,$80,$01,$80,$00,$00 .byte $80,$00,$00,$80,$01,$80,$03,$80 .byte $00,$00,$00,$80,$01,$00,$00,$80 .byte $00,$80,$01,$01,$80,$00,$01,$00 ini start_sio org $1000 :$C000 .byte $ff org $D800 :$2700 .byte $ff run_adr lda #$74 sta colbak _stop jmp _stop ; endless loop run run_adr as you see jsr xBIOS_SET_DEFAULT_DEVICE means "work on devices connected via SIO port". the next examples will include programs that work with any device eg HDD. If anyone has doubts about the use of xB in a particular case then I can explain on examples. test.atr 2 Quote Link to comment Share on other sites More sharing options...
xxl Posted July 4, 2014 Author Share Posted July 4, 2014 access to indexed data in same file. graphics data are compressed by LZ4. xFILE equ xBIOS+$3ec ; file handle xDAUX3 equ xBIOS+$3f3 ; buffer offset if AtariDOS FS xDAUX2 equ xBIOS+$3fd ; sektor hi if AtariDOS FS xDAUX1 equ xBIOS+$3fe ; sektor lo if AtariDOS FS PUPBT1 equ $033D ;power-up validation byte 1 myscr equ $8150 myscr1 equ $9000 colour equ myscr+$1e01 fhandle equ $80 org PUPBT1 .byte d'xxl' ; let the RESET key works as RESET key org $c00 Mydlist .byte $70,$70,$70 .byte $4e,a(myscr) :93 .byte $0e .byte $4e,a(myscr1) :97 .byte $0e .byte $41,a(Mydlist) myinit lda #$00 sta DMACTLS lda <Mydlist sta DLISTLS lda >Mydlist sta DLISTHS lda #%00100010 sta DMACTLS load_index ldx load_gfx+1 lda xDAUX1 sta fhandle,x lda xDAUX2 sta fhandle+1,x lda xDAUX3 sta fhandle+2,x cpx #$0c bne skip lda #$100-(ldgfx+2-load_gfx) sta ldgfx+1 bne skip load_gfx ldx #0 lda fhandle,x sta xFILE lda fhandle+1,x sta xFILE+1 jsr xBIOS_OPEN_DEFAULT_FILE ldx load_gfx+1 lda fhandle+2,x sta xDAUX3 skip lda #%1111 sbx #$100-$04 sax load_gfx+1 lda <myscr sta dest lda >myscr sta dest+1 jsr unlz4 ldx #$02 @ lda colour,x sta COLPF0S,x dex bpl @- ldgfx bmi load_index unlz4 icl 'unlz4.asm' ini myinit opt h- ins 'DRUID.LZ4',$0b,.FILESIZE 'DRUID.LZ4'-$0b-$06 ins 'LOADING.LZ4',$0b,.FILESIZE 'LOADING.LZ4'-$0b-$06 ins 'SHPOON2.LZ4',$0b,.FILESIZE 'SHPOON2.LZ4'-$0b-$06 ins 'POTATERR.LZ4',$0b,.FILESIZE 'POTATERR.LZ4'-$0b-$06 windows LZ4: http://fastcompression.blogspot.fr/p/lz4.html 6502 unLZ4: http://xxl.atari.pl/?p=1524 test.atr 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.