A86: Memory Expander
[Prev][Next][Index][Thread]
A86: Memory Expander
For the interested, a true memory expander, for the 86.
Kirk
;
; Pterodactyl -- Memory Expander
; (C) 2000 Kirk Meyer
;
; This program gives you extra memory. However, you must save SOME
; extra space for the OP & FP stacks. I recommend 1024 as a very safe
; value. You can increase or decrease this value with the #define SIZE
; below.
;
; WARNING! Many ASM programs have come to rely on using RAM page 1 as
; free space. This could cause major problems... Right now there is no
; way to remove this other than resetting your calculator.
;
; I am not responsible for anything that this does to your calculator.
;
#include "asm86.h"
#include "ti86asm.inc"
; Change this #define to change how much space you want to leave for the
; OP and FP stacks. 256 is a pretty good value for normal usage.
#define SIZE 1024
_OPBASE equ 0D28Fh
_OPS equ 0D291h ; op stack pointer
ld hl,$8000+SIZE ; move the op stack down... since we're using
ld (_OPBASE),hl ; _jforce at the end, we don't need to actually
ld (_OPS),hl ; move the stack contents.
ld a,$01 ; this is our destination. we're going to move
ld hl,SIZE ; stuff so that there's SIZE bytes left for OP & FP
ld de,$4000-SIZE ; stacks. (from the #define above)
call $475b ; _copy_bkwd
push af ; save A \____ abs pointer to
push de ; DE / "deleted" data
push bc ; save BC ----- size of removal
xor a ; also, write the _ABS_ size of the removal
ld ($D27A),a ; to the _DELADJAMT thingie
ld ($D27B),bc ; (required for next call)
call $51FD ; update most ptrs
pop bc ; pop size of removal
pop de ; pop A
pop af ; DE
ld h,0 ; HBC is used so we zero H
call $476F ; update all of the VAT entries
jp $409c ; _jforce
.end
Follow-Ups: