;--------------------------------------------------------- ; !to "dirfaker.prg",cbm ; ; CBM RAM-DRIVE 2008 Evo-Workstage ; ; THIS WORKSTAGE IS ONLY FOR EVOLUTION-PURPOSES ! ; ; Fakes some DIR-Entries without any stored Data ; ; 21. Sept. 2K8 ; ; 6502-Compiler: ACME ; ; Memory : $a800-$afff : uses 2kB ROMRAM : Page 0 ; *= $a800 ; sys 43008 ;-------------------------------------------------- ; ROM Routines ;-------------------------------------------------- strout = $bb24 chrout = $ffd2 ; print a char on screen get = $ffe4 ; to get pressed keys screen = $8000 ; Screen RAM clearscreen = $e015 nextline = $d534 wroa = $d717 intout = $cf83 space = $d531 bsout = $ffd2 beep = $e02a basin = $ffcf ;-------------------------------------------------- ; Own space ;-------------------------------------------------- buf = $af05 bamofs = $affb track_s = $affc dirsector = $affd blocks = $affe rbytes = $afff fnadr = $da fnlen = $affa baslo = $2a bashi = $2b ;-------------------------------------------------- ; RAM-Drive ;-------------------------------------------------- sector = $a000 page = $a001 dataport = $a400 mypage = $0a mysector = $0b track = $0c pager = $0d ;-------------------------------------------------- start: lda #$20 ; restore buffer ldx #00 l0: sta filen,x inx cpx #32 bne l0 lda #00 sta track_s sta dirsector sta blocks sta rbytes ldx #11 ; string-len lda #txt1 ; high byte sta $20 jsr strout ; put it on the screen lda #buf sta $02 ; place for filename ldy #0 ; input filename from screen to buf l1: jsr basin cmp #$d beq l2 sta ($01),y iny bne l1 l2: sty fnlen lda fnlen ; cut fnlen and #15 ; sta fnlen ; to 16 chars lda #$d jsr bsout ; echo cr lda fnlen bne j0 rts j0: lda baslo ; Basic low pointer sta rbytes lda bashi ; Basic high pointer ldx #11 ; string-len lda #txt2 ; high byte sta $20 jsr strout ; put it on the screen ldx fnlen ; string-len lda #buf ; high byte sta $20 jsr strout ; put it on the screen jsr space lda #73 ; "i" jsr bsout lda #78 ; "n" jsr bsout lda bashi ; calculate Blocks sec sbc #04 sta blocks ldx baslo ; display used bytes on screen lda blocks jsr intout ; display "bytes" ldx #6 ; string-len lda #txt3 ; high byte sta $20 jsr strout ; put it on the screen ;------------------------- lda #00 ; offset Track 1 sector 0 sta page sta mypage ; own buffer sta dirsector lda #64 ; seek to T/S:1/0 sta sector sta mysector ; own buffer m0: lda dataport cmp #00 beq s_found ; free sector found lda m0+1 ; find clc adc #32 ; next sta m0+1 ; free space sta m1+1 bcs hiup ; or one sctor up inc m2+1 ; inc file-id bne j2 inc m3+1 ; inc hi-file-id j2: jmp m0 hiup: inc m2+1 ; inc file-id inc mysector lda mysector sta sector lda mysector cmp #127 ; up to sector 127 bne m0 ; else drive full 8o0 ldx #13 ; string-len lda #txt4 ; high byte sta $20 jsr strout ; put it on the screen rts s_found: m2: lda #01 ; create the dir-entry sta filen m3: lda #00 sta filen+1 ; id lda #01 sta filen+2 ; filetyp :"prg" lda #00 sta filen+3 ; track & sta filen+4 ; sector fake lda #00 ; dir : $00:root sta filen+21 lda baslo ; pointer low sta filen+22 lda bashi ; pointer hi sta filen+23 lda baslo ; calculate blocks cmp #00 beq j1 inc blocks j1: lda blocks sta filen+24 ldx #00 ; write complete Dir-Entry-Fake l6: lda filen,x m1: sta dataport,x inx cpx #32 bne l6 rts *=$af00 filen: !pet" " *=$af20 txt1: !pet"Filename ? " txt2: !pet"saving ... " txt3: !pet" Bytes" txt4: !pet"Drive Full !"