Implement simulated LOMEM and HIMEM, add memory size check in patched lemonade
authorNick Downing <nick@ndcode.org>
Sun, 22 May 2022 06:50:32 +0000 (16:50 +1000)
committerNick Downing <nick@ndcode.org>
Sun, 22 May 2022 06:50:32 +0000 (16:50 +1000)
apple_io.py
lemonade/lemonade.bas.patch

index 7b97b69..65de630 100644 (file)
@@ -39,6 +39,8 @@ ZP_STATUS = 0x48 # Flag register save
 ZP_SPNT = 0x49 # Stack pointer save
 ZP_RNDL = 0x4E # Keybounce random number low
 ZP_RNDH = 0x4F # Keybounce random number high
+ZP_LOMEM = 0x69 # current lomem (word variable)
+ZP_HIMEM = 0x73 # current himem (word variable)
 VP_REENTER = 0x03D0 # Re-enter DOS
 VP_RECONNECT = 0x03EA # Reconnect DOS I/O hooks
 VP_BRKV = 0x03F0 # Break vector address
@@ -194,12 +196,17 @@ fd_out = sys.stdout.fileno()
 poll_in = select.poll()
 poll_in.register(fd_in, select.POLLIN)
 mem = {
+  # following values were taken from a 48K Apple after normal boot and NEW
   ZP_WNDLFT: 0,
   ZP_WNDWTH: 40,
   ZP_WNDTOP: 0,
   ZP_WNDBTM: 24,
   ZP_CH: 0,
-  ZP_CV: 0,
+  ZP_CV: 23, # just a likely value (depends on previous terminal activity)
+  ZP_LOMEM: 4,
+  ZP_LOMEM + 1: 8,
+  ZP_HIMEM: 0,
+  ZP_HIMEM + 1: 150,
   TONE_PERIOD: 0,
   TONE_DUR: 0,
   NICK_DURL: 0,
@@ -372,10 +379,14 @@ def tone(freq, dur): # Hz, s
     assert False
 
 def himem(addr):
-  pass
+  addr &= 0xffff
+  mem[ZP_HIMEM] = addr & 0xff
+  mem[ZP_HIMEM + 1] = addr >> 8
 
 def lomem(addr):
-  pass
+  addr &= 0xffff
+  mem[ZP_LOMEM] = addr & 0xff
+  mem[ZP_LOMEM + 1] = addr >> 8
 
 def peek(addr):
   addr &= 0xffff
index 57cd2cc..c7a5ac4 100644 (file)
@@ -1,17 +1,25 @@
 --- lemonade.bas       2022-05-20 00:21:16.340356477 +1000
-+++ lemonade_patched.bas       2022-05-21 18:30:34.828099790 +1000
-@@ -1,5 +1,8 @@
++++ lemonade_patched.bas       2022-05-22 16:49:59.180075298 +1000
+@@ -1,5 +1,3 @@
 -1LOMEM:14080
 -5GOSUB10000:GOSUB11000:GOSUB16000:GOTO135
-+1HIMEM:38272
-+2PRINT CHR$(4);"BLOAD LEMONADE TONE NICK.OBJ":RE=768:TN=776:DL=777:DH=779:FL=781:FH=788
-+3PRINT CHR$(4);"BLOAD LEMONADE FLASH PATCHED.OBJ":FE=38278:FI=38383
-+4IN#0:PR#0
-+5GOSUB11000
  10REM  <<< LEMONADE STAND >>>
  15REM 
  20REM FROM AN ORIGINAL PROGRAM
-@@ -102,11 +105,11 @@
+@@ -10,6 +8,12 @@
+ 70REM  MODIFIED FOR THE APPLE
+ 80REM      FEBRUARY, 1979
+ 90REM    BY CHARLIE KELLNER
++100IFPEEK(116)<150THENPRINT"48K REQUIRED":END
++105HIMEM:38272
++110PRINT CHR$(4);"BLOAD LEMONADE TONE NICK.OBJ":RE=768:TN=776:DL=777:DH=779:FL=781:FH=788
++115PRINT CHR$(4);"BLOAD LEMONADE FLASH PATCHED.OBJ":FE=38278:FI=38383
++120IN#0:PR#0
++125GOSUB11000
+ 135DIMA(30),L(30),H(30),B(30),S(30),P(30),G(30)
+ 150P9=10
+ 160S3=.15
+@@ -102,11 +106,11 @@
  1120PRINT:IFSC=10ANDRND(1)<.25THEN2300
  1130PRINT"$$ LEMONSVILLE DAILY FINANCIAL REPORT $$"
  1135PRINT
@@ -28,7 +36,7 @@
  1180REM  CALCULATE PROFITS
  1182IFR2=2THEN2290
  1183IFR3=3THEN2350
-@@ -201,50 +204,44 @@
+@@ -201,50 +205,44 @@
  5060GOSUB18000
  5070REM 
  5090HOME:RETURN
  11730GOTO11710
  12000REM  TITLE PAGE
  12100TEXT:HOME:PRINTCHR$(7);
-@@ -318,7 +315,7 @@
+@@ -318,7 +316,7 @@
  15151IFSC=2ORSC=7THEN15160
  15152IFSC=10THENCOLOR=15
  15157IFSC=5THENCOLOR=0
  15160IFSC=7THENCOLOR=9
  15162HLIN3,5AT1:HLIN2,6AT2:FORI=3TO6:HLIN1,7ATI:NEXT:HLIN2,6AT7:HLIN3,5AT8
  15170VTAB22:HTAB8:PRINT" LEMONSVILLE WEATHER REPORT ":PRINT
-@@ -327,54 +324,74 @@
+@@ -327,54 +325,74 @@
  15182IFSC=7THENHTAB15:PRINT" HOT AND DRY ";
  15184IFSC=10THENHTAB17:PRINT" CLOUDY ";
  15186IFSC=5THENHTAB14:PRINT" THUNDERSTORMS! ";:GOSUB17000