blob: e9942388b02aec7c8e6ca600dfe62f19c1d3fb95 [file] [log] [blame]
.globl _calc_free_ram
.globl _get_ram_start
.globl _get_ram_end
.globl __sdcc_heap_init
.area _GSINIT
call __sdcc_heap_init
.area _CODE
_calc_free_ram::
push bc
;; get information about BASIC ROM
ld c,#0x0
call #0xb915
cp #0x80
jr nz,gfr
;; must be built in ROM
;; v1.0 (BASIC 1.0 in CPC464)
;; v1.1 (BASIC 1.1 in CPC664)
;; v1.2 (BASIC 1.1 in CPC6128 and KC Compact)
;; v1.4 (BASIC 1.1 in CPC+)
ld a,h
cp #0x1
ret z
ld a,l
or a
jr z,basic10
;; basic 1.1
ld hl,(#0xb073)
inc hl
ld bc,(#0xb736)
or a
sbc hl,bc
jr nz,after_himem11
ld hl,(#0xae6c)
ld (ram_start),hl
ld hl,(#0xb071)
ld (ram_end),hl
gfr:
pop bc
ret
after_himem11:
;; after himem
ld hl,(#0xb073)
inc hl
ld (ram_start),hl
;; start of UDG
ld hl,(#0xb736)
dec hl
ld (ram_end),hl
pop bc
ret
basic10:
ld hl,(#0xb08f)
inc hl
ld bc,(#0xb296)
or a
sbc hl,bc
jr nz,after_himem10
ld hl,(#0xae89)
ld (ram_start),hl
ld hl,(#0xb08d)
ld (ram_end),hl
pop bc
ret
after_himem10:
;; after himem
ld hl,(#0xb08f)
inc hl
ld (ram_start),hl
;; start of UDG
ld hl,(#0xb296)
dec hl
ld (ram_end),hl
pop bc
ret
_get_ram_start::
ld hl,(ram_start)
ret
_get_ram_end::
ld hl,(ram_end)
ret
ram_start::
.dw 0
ram_end::
.dw 0