From 7900a4474e887403393dfb313fe87baabc36af79 Mon Sep 17 00:00:00 2001 From: Hexa Dust Date: Mon, 27 Oct 2025 13:50:34 +0000 Subject: [PATCH] reading images form file --- oled.mac | 83 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 73 insertions(+), 10 deletions(-) diff --git a/oled.mac b/oled.mac index 6554eb5..6741a98 100644 --- a/oled.mac +++ b/oled.mac @@ -7,6 +7,14 @@ LF EQU 0Ah ; new line BDOS EQU 0005h ; BDOS entry point PSTR EQU 09h ; print string CRED EQU 01h ; read console +FOPE EQU 0Fh ; file open +FRED EQU 14h ; file read next record + +FCB EQU 5Ch ; File Control Block +FCBFNAME EQU FCB+01h ; FCB File Name +FCBEX EQU FCB+0Ch ; FCB Excent Number +FCBRC EQU FCB+0Fh ; FCB Record Count +FCBCR EQU FCB+20h ; FCB Current Record OLED EQU 50h ; base addr of OLED card ORST EQU 04h ; reset command (H) @@ -30,16 +38,49 @@ OCOLL EQU 80h ; column count: 128 columns ; MAIN CALL OINIT ; init OLED CALL OCLS ; clear screen -CALL PROMPT ; print prompt +CALL OCSTART ; go to start -CALL OCSTART ; go to start -CALL READLINE ; read row A -CALL READLINE ; read row B -CALL READLINE ; read row C -CALL READLINE ; read row D +LD A,(FCBFNAME) ; load first char of file name +CP ' ' ; check file name provided +JP NZ,MAIN1 +CALL PROMPTREAD ; read from prompt +RET ; exit to CP/M + +MAIN1: +CALL FILEREAD ; read from file RET ; exit to CP/M +PROMPTREAD: + LD DE,MSGPROMPT + CALL PRINT ; print prompt + + CALL READLINE ; read row A + CALL READLINE ; read row B + CALL READLINE ; read row C + CALL READLINE ; read row D + RET + +FILEREAD: + LD DE,MSGFILEREAD + CALL PRINT ; print reading from file + XOR A + LD (FCBEX),A ; select 0'th extent + LD (FCBRC),A ; clear + LD C,FOPE ; open file + LD DE,FCB ; use default FCB + CALL BDOS + CP 0FFh ; is error + JP Z,FILEREAD1 + XOR A + LD (FCBCR),A ; start from beggining + CALL READRECORD ; read 128 byte record + RET +FILEREAD1: + LD DE,MSGOPENERR + CALL PRINT + LD A,0FFh + RET READLINE: LD D,OCOLL ; number of columns @@ -49,7 +90,22 @@ READLINE1: CALL ODATA ; write to OLED POP DE DEC D ; count donw columns - JP NZ,READLINE1 ; next column + JP NZ,READLINE1 ; next column + RET + +; reads block using default FCB +; A=0 - OK +; A=FFh - error +READRECORD: + LD C,FRED ; read file + LD DE,FCB ; use default FCB + CALL BDOS + JP NZ,READRECORD1 + RET +READRECORD1: + LD DE,MSGREADERR + CALL PRINT + LD A,0FFh ; error RET OINIT: @@ -169,15 +225,22 @@ READHEX: OR B ; OR B to A RET -PROMPT: +; DE - address to $ terminated string +PRINT: LD C,PSTR ; load function number - LD DE,PROMPTMSG ; load string addr CALL BDOS ; call CP/M RET -PROMPTMSG: +MSGPROMPT: DB 'OLED:>', CR, LF,'$' ; string terminated with $ +MSGFILEREAD: + DB 'Reading from file', CR, LF, '$' +MSGOPENERR: + DB 'Error opening file', CR, LF, '$' +MSGREADERR: + DB 'Error reading file', CR, LF, '$' + ; Initialization sequence ; 081h,080h - set contrast (080h full) ; 020h,000h - set horizontal window wrapping