Classic Computer Magazine Archive COMPUTE! ISSUE 25 / JUNE 1982 / PAGE 139

Run 96K Programs On The SuperPet

Paul Donato
Sudbury, Ontario

If you have a SuperPET, this article will show you how to use all 96Kfrom Commodore BASIC.

The SuperPet has an additional 64K of memory: 16 4K banks addressed at memory location 9000 hex. POKEing a decimal number from 0 to 15 into decimallocation 61436 will cause the appropriate bank to be switched in. Full use of this memory is possible when the SuperPet is used in the Commodore BASIC mode. By having a main program in the regular 32K of PET memory one can access up to 16 4K modules or BASIC routines which are preloaded into the additional 4K memory banks. To do this the main program must do basically three things:

  1. it must POKE into location 61436 the number of the desired bank.
  2. it should then POKE 41,144. This causes the start-of-BASIC pointer to point to 9000 hex.
  3. finally, the program should execute a GOTO, directing program execution to a line number within the desired module.

Ideally, the preceding steps should all be executed within the same program line. All program variables still reside in the regular 32K of memory and can therefore be shared by the main program and all of the modules. All string variables should be initialized by the main program. This will insure that no string pointers will point beyond $8000 hex.

To return to the main program from a module, simply POKE 41,4 and GOTO to a line in the main program. Again, these commands should be executed on the same program line in the module program.

Loading Programs In The 4K Banks

The BASIC program modules are written, saved, and loaded in the regular 32K PET memory normally. To transfer the module into the 4K bank, a small machine code program residing at $7FB0 hex can be used. This program must first be loaded into memory using the PET monitor before the modules are loaded in. Once this is done the appropriate module is called into memory using a load command, the appropriate bank number is then POKEd into location 61436 and the transfer is executed with the command SYS32688. Once all of the required modules are loaded in this way, the system is reset with the command SYS64790 and the main program is then LOADed in and RUN.

Note: Trying to see which bank is switched in by PEEKing location 61436 is not possible because the banks are latched in during the POKE command and checking this location after this gives a meaningless number.

This is a listing of the machine code program which transfers BASIC program module from main memory in the PET to location 9000 hex and makes it executable.

7FB0 A9 00     LDA #$00    ;SET UP LOW ADDRESS POINTERS
7FB2 85 00     STA $00     ;HEX0400
7FB4 A9 04     LDA #$04
7FB6 85 01     STA $01
7FB8 A9 00     LDA #$00    ;SET UP POINTERS TO HIGH
7FBA 85 02     STA $02     ;ADDRESS HEX 9000
7FBC A9 90     LDA #$90
7FBE 85 03     STA $03
7FC0 A2 0F     LDX #$0F	;NO. OF 256 BYTE BLOCKS TO
7FC2 A0 00     LDY #$00    ;TRANSFER-1
7FC4 Bl 00     LDA ($00),Y ;DO THE ACTUAL TRANSFER
7FC6 91 02     STA ($02),Y
7FC8 88        DEY
7FC9 DO F9     BNE $7FC4   ;FINISH THE BLOCK (256 BYTES)
7FCB E6 01     INC $01     ;MOVE TO NEXT BLOCK
7FCD E6 03     INC $03
7FCF CA        DEX
7FD0 30 03     BMI $7FD5   ;BRANCH IF LAST BLOCK DONE
7FD2 4C C2 7F  JMP $7FC2   ;IF NOT CONTINUE TRANSFER
7FD5 A9 90     LDA #$90    ;CHANGE START OF BASIC POINTER
7FD7 85 29     STA $29     ;TO 9000 HEX
7FD9 20 B6 B4  JSR $B4B6   ;RELINK THE BASIC TEXT AT 9000 HEX
7FDC A9 04     LDA #$04    ;RESTORE START OF BASIC TO 0400
7FDE 85 29     STA $29
7FF0 60        RTS         ;RETURN