240 lines
14 KiB
Plaintext
240 lines
14 KiB
Plaintext
|
|
M100 "Hackers Guide"
|
|
|
|
complied and converted to html by Andy Diller for Web100 1996
|
|
|
|
______________________________________________________________________________________________________________________________
|
|
|
|
* M100 Rom hooks
|
|
* Machine Language Files Explained
|
|
* M100 Tips and Tricks
|
|
|
|
______________________________________________________________________________________________________________________________
|
|
|
|
Detailed Study of Model 100 ROM Hooks
|
|
|
|
Copyright 1986 by Bob Andersen, Micro Analog Associates. Monroe, CT. 06468
|
|
|
|
Routine RST 7 calls the nth 2-byte address specified in the HOOK table located in RAM, starting at 64218, where 2N is the
|
|
value of the byte that follows the RST 7 instruction.
|
|
|
|
This study details the location and nature of all RST 7 instructions within a Model 100 ROM.
|
|
|
|
Default indicates the action installed by a cold start. Address 32755 is installed in the HOOK table for RET and 2267 is
|
|
installed for FC ERROR.
|
|
|
|
|
|
Hook Addr 2N Addr Default In Function (Addr)
|
|
RST 7
|
|
|
|
_____________________________________________________________________________________________________________________
|
|
|
|
64218 0 16643 RET CLEAR 16633
|
|
64220 2 7592 RET MAX(RAM) 7579
|
|
64222 4 4820 RET CHGET 4811
|
|
64224 6 5102 RET CHSNS 5083
|
|
64226 8 17175 RET LCD 19268
|
|
64228 10 5232 RET PNOTAB 5232
|
|
64230 12 19656 RET INPUT$ 20110
|
|
64232 14 20101 RET INPUT$(NM ERROR) 20110
|
|
64234 16 20194 RET INPUT$ 20110
|
|
64236 18 20510 RET LINE(NM ERROR) 3141
|
|
64238 20 19796 RET CLOSE(IE ERROR) 20008
|
|
64240 22 19944 RET SAVE 19919
|
|
64242 24 19727 RET OPEN 19659
|
|
64244 26 19851 RET LOAD 19824
|
|
64246 28 19751 RET OPEN 19659
|
|
64248 30 19625 RET EOF(IE ERROR) 6281
|
|
64250 32 20064 RET LCD(NM ERROR) 19268
|
|
64252 34 19992 RET SAVE(NM ERROR) 19919
|
|
64254 36 19997 RET LOAD(NM ERROR) 19824
|
|
64256 38 6281 RET EOF 6281
|
|
64258 40 20597 RET OPEN 19659
|
|
64260 42 20627 RET OPEN 19659
|
|
64262 44 20643 RET OPEN(NM ERROR) 19659
|
|
64264 46 20630 RET OPEN(NM ERROR) 19659
|
|
64266 48 20771 RET OPEN 19659
|
|
64268 50 21789 RET TELCOM(TERM-F6) 20806
|
|
64270 52 21792 RET TELCOM(TERM-F7) 20806
|
|
64272 54 22064 RET TELCOM(TERM-UP) 20806
|
|
64274 56 24673 RET TEXT 24046
|
|
64276 58 7619 FC ERROR WIDTH 7619
|
|
64278 60 17226 FC ERROR LCD 19268
|
|
64280 62 7760 FC ERROR SCREEN 7714
|
|
64282 64 NOT IN ROM FC ERROR NonemTHROUGH
|
|
64294 76 NOT IN ROM FC ERROR None
|
|
64296 78 20587 FC ERROR LOF 20587
|
|
64298 80 20589 FC ERROR LOC 20589
|
|
64300 82 20591 FC ERROR LFILES 20591
|
|
64302 84 20595 FC ERROR DSKI$ 20595
|
|
64304 86 20593 FC ERROR DSK0$ 20593
|
|
64306 88 8095 FC ERROR KILL 8081
|
|
64308 90 8272 FC ERROR NAME 8247
|
|
64310 92 8923 FC ERROR SAVEM 8908
|
|
64312 94 9381 FC ERROR LOADM,RUNM 9361
|
|
64314 96 NOT IN ROM (zeroed) None
|
|
THROUGH
|
|
64328 NOT IN ROM (zeroed) None 110
|
|
|
|
Bob Anderson (70526,1233) kindly provided a compendium of RAM hooks in the Model 100 actuated by means of RST 7. Here are
|
|
a few hooks to add to his list.
|
|
|
|
FB1A CRT open
|
|
FB1E CRT put
|
|
FB20 WAND open
|
|
FB22 WAND close
|
|
FB24 WAND get
|
|
FB26 WAND other
|
|
_____________________________________________________________________________________________________________________
|
|
|
|
Machine Language Files Explained
|
|
|
|
There is a lot of mystery surrounding CO programs because of the way they are loaded into the Model 100, what you should
|
|
know first is that who ever designed its software evidently did so with Text files and Basic programs in mind were as
|
|
Machine language programs were an after thought. You see file management is done automatically for Text files and Basic
|
|
programs, their file type, starting address and name are recorded directly into the file directory in machine memory
|
|
(63930-64138) when they are created. As old files are deleted and new ones created the remaining files are moved up and
|
|
down in RAM and as their locations change their starting addresses are automatically updated in the file directory.
|
|
|
|
Machine language or CO programs on the other hand often times cannot be moved because of address specific routines within
|
|
the program so they are given a fixed address and here's were things get sticky for this is not compatible with the
|
|
operations of the file manager. To accommodate CO programs a modification had to be made, instead of going directly to the
|
|
program from the address found in the file directory the machine goes to a pseudo file which contains a 6 byte table with
|
|
the address information for the the location of the programs code. In this way the file manager can move the pseudo file
|
|
but not the real CO program.
|
|
|
|
When you create a Text file or Basic program in the Model 100 you do so through the built-in programs TEXT and BASIC which
|
|
use the file manager but when you create a CO program you must first load it from a Text file (the file may be in decimal,
|
|
hexadecimal or ASCII characters) to its end location in RAM. This is done using a "loader" which converts the file from
|
|
what ever form it's in to single bytes, it may even be tailored for that specific program saving you any further work. If
|
|
the loader wasn't tailored for that program or the file was loaded from tape you must enter the programs name and address
|
|
information so that the file directory can CALL the program, this is done in two steps:
|
|
|
|
First go to BASIC and set the HIMEM pointer to the very first address of the CO programs code, this is done with the CLEAR
|
|
command and keeps the machine from using that area as the RAM fills up.
|
|
|
|
Second you have to enter the programs name and address information with the SAVEM routine, this puts the 6 byte address
|
|
table in the pseudo file which is automatically recorded in the file directory as the CO program. The SAVEM routine
|
|
incorporates many of the functions of the file manager but you control it manually.
|
|
|
|
If the CO program is loaded from a Tandy Disk Drive the SAVEM operation is automatically done for you but you still have
|
|
to set HIMEM.
|
|
|
|
If you do not know the addresses for either the first or the second step just type RUNM "program name" (the "CO" extension
|
|
is not needed) and you will get the "Top","End","Exe" addresses followed by a "OM Error".
|
|
|
|
If you should accidentally KILL a CO program from the Menu and find that you have to get back into it you can still run
|
|
the program by CALLing its Execution address, if it is the lowest CO program or the only one in RAM and its Top address
|
|
and Execution address are the same (they usually are) you can CALL HIMEM.
|
|
|
|
_____________________________________________________________________________________________________________________
|
|
|
|
M100 Tricks and Tips
|
|
|
|
There are 36 bytes of RAM from 62982 to 63017 which can effectively be rendered invisible if an optional ROM is not
|
|
installed. Whatever you poke into those 36 bytes will stay there regardless of any BASIC or M/L programs that you may run.
|
|
|
|
The original routine from 62981 to 63011 checks for the existence of an optional ROM every time you power up, if one is
|
|
present the value 255 is stored at 63018 and the name of that ROM is stored from 64164 to 64171. Addresses 63012 to 63017
|
|
are used when selecting the optional ROM from the Menu.
|
|
|
|
POKE 62981,201: RET, which effectively makes your 100 think that an optional ROM is installed.
|
|
|
|
POKE 63018,255: To prevent a cold-start on power-up, the remaining 36 bytes are now free to poke in anything you want.
|
|
|
|
Telcom
|
|
|
|
Interested in more free space to poke stuff into? TELCOM uses 64704 to 65023 as a buffer for its previous screen function,
|
|
it is also used by the Lucid ROM when it is installed and for some Menu functions which begin at 64904. There are 320
|
|
bytes, the first 200 of which are perfectly safe. The remaining 120 bytes may be used as long as the program using that
|
|
area doesn't use the Menu's date and time routine while running.
|
|
|
|
Addresses 63109 to 63362 are reserved for the INPUT buffer, the later part of which has been used to store short M/L
|
|
routines while leaving enough space for normal buffer operations.
|
|
|
|
The MDM & COM buffer from 65350 to 65413 can be used as long as it is not being accessed for input or output operations,
|
|
there are 64 more bytes.
|
|
|
|
CALL 20806 Enter TELCOM with modem on.
|
|
|
|
CALL 21172 Connect telephone line.
|
|
|
|
CALL 21179 Disconnect telephone line.
|
|
|
|
CALL 21795 Prev screen (64704-65023).
|
|
|
|
CALL 21608:
|
|
_____________________________________________________________________________________________________________________
|
|
|
|
POKE to restore the built-in modem:
|
|
|
|
FOR A=63067 TO 63071:READ Z:POKE A,Z:NEXT:DATA 77,55,73,49,69
|
|
|
|
POKES for the F6 and F7 in TELCOM:
|
|
|
|
Bytes Free message: 64268,172
|
|
64269,126
|
|
|
|
Clear Screen: 64270,49
|
|
64271,66
|
|
|
|
Stop Scrolling: 64268,63
|
|
64269,66
|
|
|
|
Start Scrolling: 64270,68
|
|
64271,66
|
|
|
|
_____________________________________________________________________________________________________________________
|
|
|
|
POKES for LABLE and PRINT
|
|
|
|
Disable LABEL key: 64173,0
|
|
Enable LABEL key: 64173,1
|
|
Enable by returning to the Menu
|
|
|
|
Address 64228 is the place to intercept the print routine just before it prints a character, PCSG and others use that
|
|
location to add line feeds.
|
|
|
|
Disable printer port: 64228,136
|
|
|
|
64229,20
|
|
|
|
Enable printer port: 64228,243
|
|
|
|
64229,127
|
|
|
|
_____________________________________________________________________________________________________________________
|
|
|
|
If you wish to test the printer port to determine the status of the printer use one of these two routines:
|
|
|
|
10 CLS
|
|
20 IF (INP(187)AND6)=0 THEN BEEP:PRINT@136,"POWER OFF"
|
|
30 IF (INP(187)AND6)=2 THEN PRINT@137,"ONLINE"
|
|
40 IF (INP(187)AND6)=4 THEN BEEP:PRINT@136,"OFFLINE"
|
|
50 IF (INP(187)AND6)=6 THEN BEEP:PRINT@134,"DISCONNECTED"
|
|
60 FOR X=1TO575:NEXT:CLS
|
|
|
|
10 CLS
|
|
20 IF (INP(187)AND6)<>2 THEN BEEP:PRINT@131,"PRINTER NOT READY"
|
|
30 IF (INP(187)AND6)=2 THEN PRINT@133,"PRINTER READY"
|
|
40 FOR X=1TO575:NEXT:CLS
|
|
|
|
_____________________________________________________________________________________________________________________
|
|
|
|
These addresses return memory locations in a two address jump:
|
|
|
|
64192 Lowest address of installed RAM.
|
|
64430 Start of DO files.
|
|
64432 Start of index for CO files.
|
|
64434 Start of Variable table.
|
|
64436 Start of Array table.
|
|
64438 The first available byte in RAM.
|
|
______________________________________________________________________________________________________________________________
|
|
|
|
Address 65451 returns a non ASCII value for the last key pressed and it is also first address in the type-ahead buffer
|
|
which uses the odd addresses from 65451 to 65493.
|
|
|
|
End
|
|
|
|
Return to Web 100
|