www.cpcalive.com
Sample coding of an Amstrad Cpc Rom containing programmable basic instructions (Resident System eXtension)
.org 0C000h
.db 1
; 0C000h
Rom type=BackGround Rom
; version 1.23
.db 1
; 0C001h Rom
Mark Number
.db 2
; 0C002h
Rom Version Number
.db 3
; 0C003h Rom
Modif Level
.dw MnemoTb ; 0C004h address
table of the names which will be
;
used to call the routines via the BASIC
jp RomIni ;
0C006h first vector. This
vector will be automatically
;
called after each Cpc
system initialization
jp command1 ; 0C009h second vector
jp command2 ; 0C00Ch ...
; names table
MnemoTb .db "ROMIN" ; |ROMINI (execute the subrutine "RomIni")
.db 049h |
080h ; "I" or 080h
.db
"NAME"
; |NAME1 (execute the subrutine "command1")
.db 031h |
080h ; "1" or 080h
.db
"NAME"
; |NAME2 (execute the subrutine "command2")
.db 032h |
080h ; "2" or 080h
.db
0
; 0=mark "end of table"
; remark:
; The
end of each name is indicated by setting the bit 7 on the last
letter.
; To
call the command, it will be enough to type the name preceded by the sign "vertical bar | ", from the Cpc BASIC interpreter.
RomIni: push hl
ld
hl,IniMes ; message
to be posted with starting (finished by 0)
call TxtPost
pop hl
scf
; carry = ok
ret
command1: ld
hl,Ok1Mes ; message
to be posted
call
TxtPost
ret
command2: ld
hl,Ok2Mes ; message
to be posted
call
TxtPost
ret
IniMes .db " Program V1.23",10,13,0
Ok1Mes .db "OK1",10,13,0
Ok2Mes .db "OK2",10,13,0
; ** POST TEXT **
; <HL=offset first character
; rem: 0=end mark
TxtPost: ld a,(hl)
inc hl
or
a
; end of message ?
ret
z
; yes>return
call
0BB5Ah ; system vector "Post Text"
jr TxtPost
.end