;*---------------------------------------------------------------------*; ;* filenaam : osargs.inc *; ;*---------------------------------------------------------------------*; ;* module : Random Access Files pointer bewerkingen *; ;*---------------------------------------------------------------------*; ;* auteur : Roland Leurs *; ;* The Atomic Development Studio *; ;* ontwikkeld : december 1996 *; ;* laatste update : *; ;*---------------------------------------------------------------------*; ;* assembleren : als include opnemen in PCDFS.ASM *; ;*---------------------------------------------------------------------*; ;* oproep : - *; ;***********************************************************************; osargs jsr savepar ; save parameters cpy #0 ; bepaal functie bne osargsptr ; het betreft een pointer bewerking cmp #0 beq osargsfs ; call: opvragen filing system cmp #1 beq osargscl ; call: opvragen command line cmp #$FF ; call: flush alle buffers bne osargsexit ; spring indien onbekende call jmp osargsflushall ; flush buffers osargsexit lda par_a ; herstel accu osargsexit1 cld ; clear decimal volgens voorschrift jmp osfilexit ; einde routine via osfilexit osargsfs lda version ; laadt versienummer jsr ascii2nibble ; zet om naar binaire waarde tax ; zet in x register lda version+2 ; laadt hoge nibble release jsr ascii2nibble ; zet om naar binaire waarde asl a ; schuif naar hoge nibble asl a asl a asl a sta zp ; zet in werkruimte lda version+3 ; laadt lage nibble release jsr ascii2nibble ; zet om naar binaire waarde ora zp ; bepaal release nummer tay ; zet in y register lda #11 ; laadt return code voor PcDFS cld ; voorschrift: clear D flag rts ; einde osargs osargscl lda comline ; lees adres van commandline sta $00,x ; zet in parameterblok lda comline+1 sta $01,x jmp osargsexit ; einde routine osargsptr cmp #0 ; functie Y0: opvragen ptr beq osargsptr0 cmp #1 ; functie Y1: schrijven ptr beq osargsptr1 cmp #2 ; functie Y2: opvragen ext beq osargsext cmp #$FF ; functie Y255: flush buffers bne osargsexit ; geen ondersteunde functie, exit jmp osargsflushbuf ; flush buffer osargsptr0 lda #-16 ; zet waarde voor nieuwe pointer sta $00,x ; zet in parameterblok lda #$FF ; bij deze waarde wordt later 16 sta $01,x ; opgeteld zodat de pointer achter sta $02,x ; de header komt te staan. sta $03,x lda #1 ; laadt offset code voor pointer sta zp ; berg op in werkruimte bne osargsptr2 ; spring altijd osargsptr1 lda #0 ; laadt offset code voor pointer sta zp osargsptr2 stx zp+1 ; bewaar x-register lda #$43 ; pc commando: verplaats pointer jsr commando tya ; file handle naar pc sturen jsr zendbyte clc ; stuur header+16 naar pc lda $00,x adc #16 jsr zendbyte ldy #3 ; laadt teller osargsptr3 inx ; verhoog index lda $00,x ; lees byte van pointer adc #0 jsr zendbyte dey ; verlaag teller bne osargsptr3 ; spring indien nog bytes volgen lda zp ; laadt offset code voor pointer osargsext1 jsr zendbyte ; vanaf hier ook gebruik door osargsext ldx zp+1 ; herstel x register jsr leesbyte ; lees resultaat beq osargsptr4 ; alles goed gegaan jmp msdoserror ; spring bij fout osargsptr4 sec ; zet pointer-16 in zeropage jsr leesbyte sbc #16 sta $00,x ldy #3 ; laadt teller osargsptr5 inx ; verhoog index jsr leesbyte ; lees waarde van pointer sbc #0 sta $00,x ; zet in parameterblok dey ; verlaag teller bne osargsptr5 ; spring indien nog bytes volgen jmp osargsexit ; einde routine osargsext stx zp+1 ; berg x op in werkruimte lda #$44 ; pc commando: opvragen extensie jsr commando tya ; file handle naar accu bne osargsext1 ; gedwongen sprong naar osargsptr osargsflushall ldy #5 ; laadt laagste handle osargsflushall1 jsr osargsflushbuf1 ; schrijf buffer naar disk iny ; verhoog handle cpy #21 ; laatste gehad? bne osargsflushall1 ; spring indien nog buffers volgen jmp osargsexit ; einde routine osargsflushbuf ldy #0 ; reset index lda (parm),y ; lees filehandle tay ; zet handle in y register jsr osargsflushbuf1 ; schrijf buffer naar disk jmp osargsexit ; einde routine osargsflushbuf1 lda #$00 ; voorbereiden MS-DOS call sta zp sta zp+3 ; msb filehandle=0 lda #$68 ; INT21h, functie 68h sta zp+1 tya ; file handle sta zp+2 jmp msdoscall ; voer call uit en einde routine