Based on the article below, I reconstructed the memory switching capabilities of the LNW80 Model II.
port 31d, 1Fh bit off on ----------------------------------------------- 0 1 ROM 0h-3700h RAM 0h-3700h 2 Enable intr. Disable interrupts 3 4 5 6 7 Wr.En.0h-2FFFh Write Disable 0h-2FFFh (ROM Area)
The following is an interesting letter from Jeffrey McLean concerning EDAS used with the LNW-80 Model II. "...I discovered that EDAS would not work properly with it. When ever I would press the SHIFT @ key to pause a listing, the program would abort to the LDOS Ready prompt with the massage, 'SYS ERROR'. I traced this problem to the fact that the LNW ROM has NOP's in the place of the @CTL vector. Since the LNW-80 model II has the option of RAM in the address space from zero to X'3700', I wrote a program to move the ROM to RAM and patch it up. I am enclosing a copy of that program; you may want to pass it along if any one contacts you with a similar problem." When I looked at the program, I commented to Jeffrey that I thought the program should have a DI before switching out the ROM and an EI after restoring everything to normal with the patched low- memory RAM. Jeff said, "There are no DI or EI instructions in the program because they are not needed. When I select RAM, I output a 6 decimal to the memory management port, 31 decimal. This sets bits one and two. According to LNW documentation, setting bit one of this port will enable RAM from zero to X'3700'. Setting bit two will turn off the maskable interrupts. I've tested this; it works. Later on, I output a 130 decimal, which sets bits one and seven and resets bit two. Bit seven write protects the RAM from zero to X'2FFF'. Jeff also added code to put a jump to the DEBUG entry point in the NMI vector at 66H. He says it is extremely useful when debugging assembly language programs. This could be deleted from the code if you do not want it. i ; LNW80II/ASM ; This program was written by Jeffrey McLean. ; Revised on February 3, 1984 ; This program will move the ROM of the LNW 80 model two ; to RAM and then patch it so that EDAS (and probably ; many other programs) will work on it. @EXIT EQU 402DH @ABORT EQU 4030H @DSPLY EQU 4467H HIGH$ EQU 4049H DEBUG EQU 400FH ORG 5200H START XOR A OUT (31),A ;Make sure ROM is switched in. OUT (254),A ;Turn off reverse video LD A,(HIGH$+1) CP 90H JR NC,CONT1 LD HL,MESSAGE CALL @DSPLY JP @ABORT CONT1 LD SP,(HIGH$) LD HL,0 LD DE,EOP LD BC,30O0H PUSH HL PUSH DE PUSH BC LDIR ;Copy ROM to user memory POP BC POP HL POP DE LD A,6 OUT (31),A ;Select RAM from 0 to 12K LDIR ;Move ROM into RAM at 0 to 12K ; Patch the ROM so EDAS will work correctly. ; Fix the @CTL vector LD HL,FIX LD DE,23H LD BC,5 LDIR ; Fix the initialization for level two basic LD DE,87H LD B,2 LOOP1 LD A,(HL) LD (DE),A INC HL INC DE DJNZ LOOP1 LD DE,8FH LD A,(HL) LD (DE),A INC HL LD DE,66H LD BC,LENGTH LDIR LD A,130 OUT (31),A JP @EXIT MESSAGE DB 'Insufficient memory to fix ROM!',13 FIX OB OC5H,6,4,18H,1EH,2DH,1,OC3H LEN1 EI JP DEBUG LENGTH EQU $-LEN1 EOP EQU $ END START