Browse Source

Update flashfs.asm

Add option to use HBX_BUF for relocatable code
pull/159/head
b1ackmai1er 5 years ago
parent
commit
434c5c69e9
  1. 62
      Source/HBIOS/flashfs.asm

62
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.

Loading…
Cancel
Save