diff --git a/Source/HBIOS/flashfs.asm b/Source/HBIOS/flashfs.asm index 8fd40949..c25c2850 100644 --- a/Source/HBIOS/flashfs.asm +++ b/Source/HBIOS/flashfs.asm @@ -2,23 +2,28 @@ ;================================================================================================== ; FLASH DRIVER FOR FLASH & EEPROM PROGRAMMING ; -; 26 SEP 2020 - CHIP IDENTIFICATION IMPLMENTED -- PHIL SUMMERS +; 26 SEP 2020 - CHIP IDENTIFICATION IMPLEMENTED -- PHIL SUMMERS ; - CHIP ERASE IMPLEMENTED ; 23 OCT 2020 - SECTOR ERASE IMPLEMENTED ; 01 NOV 2020 - WRITE SECTOR IMPLEMENTED ; 04 DEC 2020 - READ SECTOR IMPLEMENTED ;================================================================================================== ; -; UPPER RAM BANK IS ALWAYS AVAILABLE REGARDLESS OF MEMORY BANK SELECTION. HBX_BNKSEL AND -; HB_CURBNK ARE ALWAYS AVAILABLE IN UPPER MEMORY AND THE STACK IS ALSO IN UPPER MEMORY DURING -; BIOS INITIALIZATION. TO ACCESS THE FLASH CHIP FEATURES, CODE IS COPIED TO THE UPPER RAM BANK +; UPPER RAM BANK IS ALWAYS AVAILABLE REGARDLESS OF MEMORY BANK SELECTION. +; HBX_BNKSEL AND HB_CURBNK ARE ALWAYS AVAILABLE IN UPPER MEMORY. +; +; THE STACK IS IN UPPER MEMORY DURING BIOS INITIALIZATION BUT IS IN LOWER +; MEMORY DURING HBIOS CALLS. +; +; TO ACCESS THE FLASH CHIP FEATURES, CODE IS COPIED TO THE UPPER RAM BANK ; AND THE FLASH CHIP IS SWITCHED INTO THE LOWER BANK. ; ; INSPIRED BY WILL SOWERBUTTS FLASH4 UTILITY - https://github.com/willsowerbutts/flash4/ ; ;================================================================================================== ; -FF_DBG: .EQU 0 ; DEBUG +FF_DBG: .EQU 1 ; DEBUG +FF_HBX: .EQU 1 ; =0 USE STACK, =1 USE HBX_BUF ; ;====================================================================== ; BIOS FLASH INITIALIZATION @@ -92,10 +97,9 @@ FF_TESTING: LD IX,FF_BUFFER ; SET SOURCE ADDRESS CALL FF_WINIT ; WRITE SECTOR CALL PRTHEXBYTE ; DISPLAY STATUS - #ENDIF ; -#IF (0) +#IF (1) LD DE,$0007 ; SET SOURCE LD HL,$F000 ; ADDRESS LD IX,FF_BUFFER ; SET DESTINATION ADDRESS @@ -159,7 +163,8 @@ FF_NXT2:CALL PRTSTR ; AFTER SEARCH DISPLAY THE RESULT ; ;====================================================================== ; -FF_FNCALL: +#IF (FF_HBX==0) +FF_FNCALL: ; USING STACK FOR CODE AREA CALL FF_CALCA ; GET BANK AND SECTOR DATA IN IY ; POP DE ; GET ROUTINE TO CALL @@ -193,8 +198,47 @@ FF_FNCALL: LD HL,(FF_STACK) ; RESTORE ORIGINAL LD SP,HL ; STACK POSITION ; +#IF (FF_DBG==1) + CALL PC_SPACE + CALL PRTHEXWORD + CALL PC_SPACE + EX DE,HL + CALL PRTHEXWORDHL + CALL PC_SPACE + EX DE,HL +#ENDIF +; + LD A,C ; RETURN WITH STATUS IN A +; + RET +#ELSE +FF_FNCALL: ; USING HBX_BUF FOR CODE AREA + CALL FF_CALCA ; GET BANK AND SECTOR DATA IN IY +; + POP HL ; GET ROUTINE TO CALL +; + LD DE,HBX_BUF ; PUT EXECUTE / START ADDRESS IN DE + LD BC,HBX_BUFSIZ ; CODE SIZE REQUIRED +; + PUSH DE ; SAVE THE EXECUTE ADDRESS + ; COPY OUR RELOCATABLE + LDIR ; CODE TO THE BUFFER + POP HL ; CALL OUR RELOCATABLE CODE + + PUSH IY ; PUT BANK AND SECTOR + POP BC ; DATA IN BC +; #IF (FF_DBG==1) CALL PRTHEXWORD +#ENDIF +; + HB_DI + CALL JPHL ; EXECUTE RELOCATED CODE + HB_EI +; +#IF (FF_DBG==1) + CALL PC_SPACE + CALL PRTHEXWORD CALL PC_SPACE EX DE,HL CALL PRTHEXWORDHL @@ -205,6 +249,8 @@ FF_FNCALL: LD A,C ; RETURN WITH STATUS IN A ; RET + +#ENDIF ; ;====================================================================== ; IDENTIFY FLASH CHIP.