From a3522d4eaa353e3b11240613668924265c8d2d03 Mon Sep 17 00:00:00 2001 From: lynchaj <86925539+lynchaj@users.noreply.github.com> Date: Sun, 18 Jul 2021 19:00:34 -0400 Subject: [PATCH] Create loader.asm loader is to allow ramtest to be run as a regular CP/M program. Relocates ramtest into upper RAM page for execution --- Source/Apps/ramtest/loader.asm | 55 ++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Source/Apps/ramtest/loader.asm diff --git a/Source/Apps/ramtest/loader.asm b/Source/Apps/ramtest/loader.asm new file mode 100644 index 00000000..f239a443 --- /dev/null +++ b/Source/Apps/ramtest/loader.asm @@ -0,0 +1,55 @@ +; Z80 +;*********************************** +;* Z80 TEST PROTOTYPE +;* LOAD MONITOR FROM ROM INTO RAM AND EXECUTE PROGRAM +;* ANDREW LYNCH +;* LYNCHAJ@YAHOO COM +;* 15 FEB 2007 +;*********************************** + + +;********************* CONSTANTS **************************************** + +RAMTOP: .EQU 0FFFFh ; HIGHEST ADDRESSABLE MEMORY LOCATION +MONSTART: .EQU 08000h ; START OF 6116 SRAM 2KB X 8 RAM F800H-FFFFH +RAMBOTTOM: .EQU 08000h ; BEGINNING OF UPPER 32K RAM PAGE +END: .EQU 0FFh ; MARK END OF TEXT +CR: .EQU 0DH ; ASCII CARRIAGE RETURN CHARACTER +LF: .EQU 0AH ; ASCII LINE FEED CHARACTER +ESC: .EQU 1BH ; ASCII ESCAPE CHARACTER + +ROMSTART_MON: .EQU 00200h ; WHERE THE DBGMON IS STORED IN ROM +RAMTARG_MON: .EQU 08000h ; WHERE THE DBGMON STARTS IN RAM (ENTRY POINT) +MOVSIZ_MON: .EQU 01000h ; DBGMON IS 4096 BYTES IN LENGTH + +MON_ENTRY: .EQU 08000h ; DBGMON ENTRY POINT (MAY CHANGE) + + + +;******************************************************************* +;* START AFTER RESET +;* FUNCTION : READY SYSTEM, LOAD MONITOR INTO RAM AND START +;******************************************************************* + + .ORG 00100h + +; DI ; DISABLE INTERRUPT + LD SP,RAMTOP ; SET STACK POINTER TO TOP OF RAM +; IM 1 ; SET INTERRUPT MODE 1 + + LD HL,ROMSTART_MON ; WHERE IN ROM DBGMON IS STORED (FIRST BYTE) + LD DE,RAMTARG_MON ; WHERE IN RAM TO MOVE MONITOR TO (FIRST BYTE) + LD BC,MOVSIZ_MON ; NUMBER OF BYTES TO MOVE FROM ROM TO RAM + LDIR ; PERFORM BLOCK COPY OF DBGMON TO UPPER RAM PAGE + +; EI ; ENABLE INTERRUPTS (ACCESS TO MONITOR WHILE CP/M RUNNING) + + JP MON_ENTRY ; JUMP TO START OF MONITOR + + .FILL 001FFh-$ + + .ORG 001FFh +FLAG: + .DB 0FFh + + .END