GENWiki

Premier IT Outsourcing and Support Services within the UK

User Tools

Site Tools


archive:programming:m100hg
                                                    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
/data/webs/external/dokuwiki/data/pages/archive/programming/m100hg.txt · Last modified: 2001/04/20 20:33 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki