Un immense Bravo pour cette magnifique réalisation!
Pour ce qui est de la mémoire, tu peux facilement en économiser. Pour cela il te faudra aussi desassembler ton programme. Pour info je joins le FORTH Bandini désassemblé :
Si je peux me permettre des suggestions :
1 - Sur le FORTH Bandini désassemblé, tu peux éliminer des mots inutiles et dont tu ne te sers pas :
EX le mot MOTOR dont il est fort peu probable que tu te serves :
Code : Tout sélectionner
;****************
;* LE MOT INKG
;****************
w_inkg
FCB $84
FCC "INK"
FCB $80+'G
FDB w_get
cf_inkg
FDB c_inkg
c_inkg
PULU A,B
STB $2029
JMP NEXT
;****************
;* LE MOT MOTOR
;****************
w_motor
FCB $85
FCC "MOTO"
FCB $80+'R
FDB w_inkg
cf_motor
FDB c_motor
c_motor
PULU A,B
TFR B,A
SWI
FCB $22
JMP NEXT
FCB $00
;****************
;* LE MOT IMMEDIATE
;****************
w_immediate
FCB $89
FCC "IMMEDIAT"
FCB $80+'E
FDB w_motor
cf_immediate
FDB c_docol
FDB cf_latest
FDB cf_lit
FDB $0040
FDB cf_toggle
FDB cf_semis
FDB w_motor de IMMEDIATE deviendra FDB w_inkg
Code : Tout sélectionner
;****************
;* LE MOT INKG
;****************
w_inkg
FCB $84
FCC "INK"
FCB $80+'G
FDB w_get
cf_inkg
FDB c_inkg
c_inkg
PULU A,B
STB $2029
JMP NEXT
;****************
;* LE MOT MOTOR
;****************
;w_motor
; FCB $85
; FCC "MOTO"
; FCB $80+'R
; FDB w_inkg
;cf_motor
; FDB c_motor
;c_motor
; PULU A,B
; TFR B,A
; SWI
; FCB $22
; JMP NEXT
; FCB $00
;****************
;* LE MOT IMMEDIATE
;****************
w_immediate
FCB $89
FCC "IMMEDIAT"
FCB $80+'E
FDB w_inkg
cf_immediate
FDB c_docol
FDB cf_latest
FDB cf_lit
FDB $0040
FDB cf_toggle
FDB cf_semis
2 Il y a des mots indispensables mais que tu ne mettras dans aucune de tes définitions :
Par exemple le mot (DO)
Code : Tout sélectionner
;****************
;* LE MOT (DO)
;****************
w_parentdo
FCB $84
FCC "(DO"
FCB $80+')
FDB w_type
cf_parentdo
FDB c_parentdo
c_parentdo
PULU A,B
PULU X
PSHS X,B,A
JMP NEXT
Je doute que tu mettes un (DO) dans tes définitions. Mais comme tu as certainement un DO et un LOOP, on peut éliminer l'entête (DO), seulement l'entête.
Code : Tout sélectionner
;****************
;* LE MOT TYPE
;****************
w_type
FCB $84
FCC "TYP"
FCB $80+'E
FDB w_emit
cf_type
FDB c_type
c_type
etc .....
;****************
;* LE MOT (DO)
;****************
;w_parentdo
; FCB $84
; FCC "(DO"
; FCB $80+')
; FDB w_type
cf_parentdo
FDB c_parentdo
c_parentdo
PULU A,B
PULU X
PSHS X,B,A
JMP NEXT
;****************
;* LE MOT (+LOOP)
;****************
w_parentploop
FCB $87
FCC "(+LOOP"
FCB $80+')
; FDB w_parentdo
FDB w_type
cf_parentploop
FDB c_parentploop
c_parentploop
etc....
Fait méticuleusement tu gagneras pas mal de RAM.
Tu le recompiles ensuite et tu as un FORTH réduit à minima.
3 - Ce qui vaut pour le source du FORTH, vaut pour ton programme si tu le décompiles.
En tout cas, Bravo
EDIT 21/11/2023 19H17 : Je ne m'étais apperçu que le fichier contenait aussi le programme MO4PAINT
Pour retrouver le Forth Original, supprimez depuis
Code : Tout sélectionner
;****************
;* LE MOT TASK
;****************
jusqu'à la fin