Rev 49 | Blame | Compare with Previous | Last modification | View Log | Download
;length 0 while reading means either absence of files of zero length file (any sector length)readfEXPORT readfPUSH {LR}LDR R1,readf__A__ ;poi to FCBB fread1__ ;R1=data ;keeps R3readfinEXPORT readfinPUSH {LR}LDR R0,readfin__fin__LDR R1,[R0] ;poi to FCBB fread1__ ;R1=data ;keeps R3fread1pp__PUSH {LR}fread1__;returns R1=data;keeps R3MOVS R6,R1 ;poi to FCBMOVS R0,#FCB__remain ;0xff = no data, 0xfe = 1 byte, ... 0x00 = 255 bytesORRS R1,R0LDRB R2,[R1] ;remainADDS R2,#1STRB R2,[R1] ;remain++;LDR R0,readf__A__ ;poi to FCB ;эхы№ч , Є.ъ. readfin Єюцх ЄєЄMOVS R0,R6 ;poi to FCBADDS R0,#0xffADDS R0,#1 ;poi to databufADDS R2,R0 ;poi to dataLDRB R0,[R1] ;remainCMP R0,#0BNE fread1OK__PUSH {R3}PUSH {R1};LDR R1,readf__A__ ;poi to FCB ;эхы№ч , Є.ъ. readfin Єюцх ЄєЄ;ORRS R1,R7 ;0xff;SUBS R1,#0xff ;poi to FCBMOVS R1,R6 ;poi to FCBLDR R0,readf__readnewbuf__A__STR R1,[R0] ;FCBBL readnewbufCMP R1,#0 ;no new bufBEQ fread1EOF__POP {R1}POP {R3};R1 = poi to remainLDRB R2,[R1] ;remainORRS R1,R7 ;0xffADDS R1,#1 ;poi to databufADDS R2,R1 ;poi to datafread1OK__LDRB R1,[R2] ;resultPOP {PC};EOF - next block doesn't existfread1EOF__POP {R1}POP {R3}MOVS R1,#TRUELDR R0,readf__waseof__STRB R1,[R0]MOVS R1,#'\n' ;EOF returns '\n';set vars as they were (next time EOF again)STRB R7,[R1] ;remain = 0xffPOP {PC}freadEXPORT freadPUSH {LR}LDR R1,fread__A__ ;poi to dataLDR R3,fread__C__ ;countfread0__PUSH {R3}LDR R3,fread__B__ ;sizefread00__PUSH {R1}LDR R1,fread__D__ ;poi to FCBBL fread1pp__ ;R1=data ;keeps bcMOVS R0,R1POP {R1}STRB R0,[R1]LDR R0,readf__waseof__LDRB R0,[R0]CMP R0,#FALSEBNE freadpopret__ADDS R1,#1SUBS R3,#1BNE fread00__POP {R3}SUBS R3,#1BNE fread0__POP {PC}freadpopret__POP {R3}POP {PC}ALIGN 4readf__A__EXPORT readf__A__DCD 0fread__A__EXPORT fread__A__DCD 0fread__B__EXPORT fread__B__DCD 0fread__C__EXPORT fread__C__DCD 0fread__D__EXPORT fread__D__DCD 0readfin__fin__DCD _finreadf__waseof__DCD _waseofreadf__readnewbuf__A__DCD readnewbuf__A__writebyteEXPORT writebytePUSH {LR}LDR R1,writebyte__A__ ;fileLDR R0,writebyte__B__ ;data ;LDRBB fwrite1__writefoutEXPORT writefoutPUSH {LR}LDR R0,writefout__fout__LDR R1,[R0] ;poi to FCBLDR R0,writefout__A__ ;data ;LDRBB fwrite1__fwrite1pp__PUSH {LR}fwrite1__;R1 = poi to FCB;R0=data;keeps R3MOVS R6,R1 ;poi to FCBMOVS R5,#FCB__lastlenLSBORRS R1,R5LDRB R5,[R1]MOVS R2,R5 ;lastlen (LSB)ADDS R2,#1STRB R2,[R1] ;lastlen++ADDS R2,R6 ;poi to FCBADDS R2,#0xff ;poi to dataSTRB R0,[R2]CMP R5,#0xffBNE fwrite1OK__;end of bufADDS R1,#1 ;lastlen (HSB)LDRB R2,[R1]ADDS R2,#1STRB R2,[R1] ;lastlen (HSB) ++PUSH {R3}ORRS R1,R7 ;0xffSUBS R1,#0xff ;poi to FCBLDR R0,fwrite__flush___A__STR R1,[R0] ;FCBBL flush_POP {R3}fwrite1OK__POP {PC}fwriteEXPORT fwritePUSH {LR}LDR R1,fwrite__A__ ;poi to dataLDR R3,fwrite__C__ ;countfwrite0__PUSH {R3}LDR R3,fwrite__B__ ;sizefwrite00__LDRB R0,[R1]PUSH {R1}LDR R1,fwrite__D__ ;poi to FCBBL fwrite1pp__ ;R0=data ;keeps bcPOP {R1}ADDS R1,#1SUBS R3,#1BNE fwrite00__POP {R3}SUBS R3,#1BNE fwrite0__POP {PC}ALIGN 4writebyte__A__EXPORT writebyte__A__DCD 0writebyte__B__EXPORT writebyte__B__DCD 0 ;DCBfwrite__A__EXPORT fwrite__A__DCD 0fwrite__B__EXPORT fwrite__B__DCD 0fwrite__C__EXPORT fwrite__C__DCD 0fwrite__D__EXPORT fwrite__D__DCD 0writefout__A__EXPORT writefout__A__DCD 0 ;DCBfwrite__flush___A__DCD flush___A__writefout__fout__DCD _fout;FUNC UINT readsectors FORWARD(PBYTE buf, UINT trsec, BYTE count);readsectorsPUSH {LR}LDR R1,readsectors__A__ ;bufLDR R2,readsectors__B__ ;trsecLDR R3,readsectors__C__ ;countPUSH {R2,R3} ;trsec, count;B $LSLS R6,R7,#8 ;LDR R6,=0xff00ANDS R6,R2 ;track<<8ASRS R6,R6,#4 ;track<<4ANDS R2,R7 ;sectorADDS R2,R6 ;(track<<4) + sectorLSLS R2,R2,#8LDR R0,readsectors__TRDBUF__ADDS R2,R0LSLS R3,R3,#6;LSLS R3,R3,#8;R2=trdbufaddr;R3=bytes count ;words count;B $wordsR2toR1__LDR R0,[R2];DCB 0x40,0xba ;REV16 R0,R0 ;уы■ўэр тэх°э ярь Є№ ╠шырэфЁр ЄЁхсєхЄ яхЁхтхЁэєЄ№ срщЄ√ т яюыєёыютрї (р яю срщЄє эх ўшЄрхЄё )ADDS R2,#4STR R0,[R1]ADDS R1,#4SUBS R3,#1BNE wordsR2toR1__B readwritesectorsq__ ;return R1=next sector;FUNC UINT writesectors FORWARD(PBYTE buf, UINT trsec, BYTE count);writesectorsPUSH {LR}LDR R1,writesectors__A__ ;bufLDR R2,writesectors__B__ ;trsecLDR R3,writesectors__C__ ;count;B $PUSH {R2,R3} ;trsec, countLSLS R6,R7,#8 ;LDR R6,=0xff00ANDS R6,R2 ;track<<8ASRS R6,R6,#4 ;track<<4ANDS R2,R7 ;sectorADDS R2,R6 ;(track<<4) + sectorLSLS R2,R2,#8LDR R0,readsectors__TRDBUF__ADDS R2,R0LSLS R3,R3,#6;LSLS R3,R3,#8;R2=trdbufaddr;R3=bytes count ;words countwordsR1toR2__LDR R0,[R1];DCB 0x40,0xba ;REV16 R0,R0 ;уы■ўэр тэх°э ярь Є№ ╠шырэфЁр ЄЁхсєхЄ яхЁхтхЁэєЄ№ срщЄ√ т яюыєёыютрї (р яю срщЄє эх ўшЄрхЄё )ADDS R1,#4STR R0,[R2]ADDS R2,#4SUBS R3,#1BNE wordsR1toR2__readwritesectorsq__POP {R3,R2} ;count, trsecLSLS R6,R7,#8 ;LDR R6,=0xff00ANDS R6,R2 ;track<<8ASRS R6,R6,#4 ;track<<4ANDS R2,R7 ;sectorADDS R2,R6 ;(track<<4) + sectorADDS R2,R3 ;+countLSLS R6,R7,#4 ;LDR R6,=0x0ff0ANDS R6,R2 ;track<<4LSLS R6,R6,#4 ;track<<8MOVS R1,#0x0fANDS R1,R2 ;sectorADDS R1,R6 ;(track<<4) + sector;return R1=next sectorPOP {PC}ALIGN 4readsectors__A__DCD 0readsectors__B__DCD 0readsectors__C__DCD 0 ;DCBwritesectors__A__DCD 0writesectors__B__DCD 0writesectors__C__DCD 0 ;DCBreadsectors__TRDBUF__DCD TRDBUF