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