Home » Archimedes archive » Archimedes World » AW-1994-06-Disc2.adf » Disk2Jun94 » !AWJune94/Goodies/Zap/!Zap/Docs/E-Template

!AWJune94/Goodies/Zap/!Zap/Docs/E-Template

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Archimedes World » AW-1994-06-Disc2.adf » Disk2Jun94
Filename: !AWJune94/Goodies/Zap/!Zap/Docs/E-Template
Read OK:
File size: 34F0 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM E-Template
   20REM
   30REM Template program for creating Zap modes.
   40REM The module will be saved to work_directory$
   50REM You should run Zap first to ensure Zap$Dir and ZapWork$Dir
   60REM are set up.
   70
   80REM directory to save module
   90work_directory$="<ZapWork$Dir>"
  100
  110REM name of mode
  120mode_name$="Test"
  130
  140REM authors name
  150mode_author$="Joe Bloggs"
  160
  170REM version number of module
  180ver$="0.01"
  190
  200REM mode number you want to be
  210REM you MUST not hard wire this in as I may have allocated it
  220REM to someone else!
  230mode_number=15
  240
  250REM mode to base this mode on (text)
  260mode_basemode=0
  270
  280REM define a proc error to print line number even if running
  290REM under wimp.
  300ON ERROR PROCerror
  310
  320REM reserve space for code / workspace
  330REM default of 64k
  340code_size%=&10000 
  350DIM code% code_size%
  360L%=code%+code_size%
  370
  380REM load the library defineing zap's variables
  390LIBRARY "<ZapWork$Dir>.Docs.E-Library"
  400
  410REM define zaps constants (call E-Library)
  420PROCdefine_zap_variables
  430
  440REM define any variables in our workspace
  450PROCset_up_variables
  460
  470REM assemble the code
  480PROCassemble_code
  490
  500REM save the module
  510SYS "OS_File",&0A,work_directory$+".Zap"+mode_name$,&FFA,0,code%,code%+length%
  520PRINT "Zap";mode_name$+" module created and saved"
  530
  540END
  550
  560REM define any variables we want to store in the module workspace
  570
  580DEF PROCset_up_variables
  590FOR pass=%1100 TO %1110 STEP 2:P%=0:O%=code%:[OPTpass
  600
  610.test_0             EQUD 0
  620.test_1             EQUD 0
  630.test_2             EQUD 0
  640.test_3             EQUD 0
  650
  660]:NEXT
  670variable_size%=P%
  680ENDPROC
  690
  700REM assemble the main code
  710
  720DEF PROCassemble_code
  730
  740REM define flags
  750
  760Iflag%=1<<27
  770Vflag%=1<<28
  780Cflag%=1<<29
  790
  800REM define register numbers (for macros)
  810
  820R0=0:R1=1:R2=2:R3=3:R4=4:R5=5:R6=6:R7=7:R8=8:R9=9:R10=10
  830R11=11:R12=12:R13=13:R14=14:R15=15:PC=15
  840
  850FOR pass=%1100 TO %1110 STEP 2:P%=0:O%=code%
  860[OPTpass
  870
  880.Module_header
  890.Start_code           EQUD 0
  900.Initialisation_code  EQUD initialise_code
  910.Finalisation_code    EQUD finalise_code
  920.Service_call_handler EQUD 0
  930.Title_string         EQUD title_string
  940.Help_string          EQUD help_string
  950.Command_keyword_tab  EQUD 0
  960.SWI_chunk_number     EQUD 0
  970.SWI_handler_code     EQUD 0
  980.SWI_decoding_table   EQUD 0
  990.SWI_decoding_code    EQUD 0
 1000
 1010\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 1020\ TITLES AND COMMAND TABLES                                    \
 1030\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 1040
 1050.help_string
 1060FNS("Zap"+mode_name$+CHR$9+ver$+" ("+FNdate+") � "+mode_author$)
 1070
 1080.title_string
 1090FNS("Zap"+mode_name$)
 1100
 1110\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 1120\ INITIALISE AND FINALISE                                      \
 1130\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 1140
 1150.initialise_code
 1160FNJSR
 1170MOV R0,#6
 1180MOV R3,#variable_size%
 1190SWI "XOS_Module"              \ claim varable workspace
 1200FNRTSVS
 1210MOV R11,R2                    \ claimed block (R11 from now on)
 1220STR R11,[R12]                 \ save as my workspace pointer
 1230STR R11,workspace_address     \ save it in the module for
 1240MOV R0,#18                    \ accessing commands.
 1250ADR R1,zap_title
 1260SWI "XOS_Module"              \ find zap
 1270FNRTSVS                       \ not found
 1280MOV R12,R4                    \ zap workspace
 1290FNADR(R0,mode_table)
 1300FNcall(Zap_AddMode)           \ add this mode to zap
 1310FNRTSVS
 1320FNADR(R0,key_command_table)   \ add table of commands
 1330FNcall(Zap_AddCommands)       \ remove this if you're not
 1350FNRTSVS                       \ using commands
 1360MOV R1,#0
 1370MOV R2,R11
 1380MOV R3,#variable_size%
 1390FNcall(Zap_FillWords)         \ clear workspace to zeros
 1400FNRTS
 1410
 1420.zap_title
 1430FNS("Zap")
 1440
 1450.workspace_address
 1460EQUD 0
 1470
 1480\X R11=module workspace |
 1490
 1500.get_workspace
 1510LDR R11,workspace_address
 1520MOV PC,R14
 1530
 1540.finalise_code
 1550FNJSR
 1560MOV R0,#7
 1570LDR R2,[R12]
 1580SWI "XOS_Module"              \ free workspace
 1590FNRTSVS
 1600MOV R0,#0
 1610STR R0,[R12]                  \ null private word
 1620FNRTS
 1630
 1640\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 1650\ Mode Table                                                   \
 1660\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 1670
 1680.mode_table
 1690EQUD mode_table               \ offset of mode table
 1700EQUD mode_title               \ mode title string
 1710EQUD mode_author              \ author string
 1720EQUD mode_basemode            \ base mode number
 1730EQUD mode_number              \ mode you want to be
 1740EQUD mode_init                \ offset of initialisation code
 1750EQUD 0                        \ offset of your menu
 1760EQUD mode_table_end-mode_table \ length of table
 1770
 1780EQUD 0                        \ mode_postload
 1790EQUD 0                        \ mode_presave
 1800EQUD 0                        \ mode_loading
 1810EQUD mode_start
 1820EQUD mode_end
 1830EQUD 0                        \ mode_width
 1840EQUD 0                        \ mode_linecol
 1850EQUD 0                        \ mode_lineoff
 1860EQUD 0                        \ mode_clnlog
 1870EQUD 0                        \ mode_clnphy
 1880EQUD 0                        \ mode_clnoff
 1890EQUD 0                        \ mode_nextline
 1900EQUD 0                        \ mode_minus
 1910EQUD 0                        \ mode_plus
 1920EQUD 0                        \ mode_sminus
 1930EQUD 0                        \ mode_splus
 1940EQUD 0                        \ mode_cminus
 1950EQUD 0                        \ mode_cplus
 1960EQUD 0                        \ mode_redrawline
 1970EQUD 0                        \ mode_redrawlnum
 1980EQUD 0                        \ mode_char
 1990EQUD 0                        \ mode_delete
 2000EQUD 0                        \ mode_tab
 2010EQUD 0                        \ mode_return
 2020EQUD 0                        \ mode_renumber
 2030EQUD 0                        \ mode_saveandrun
 2040EQUD 0                        \ mode_linestart
 2050EQUD 0                        \ mode_lineend
 2060EQUD 0                        \ mode_linenext
 2070EQUD 0                        \ mode_lineprev
 2080EQUD 0                        \ mode_copy
 2090EQUD 0                        \ mode_joinline
 2100EQUD 0                        \ mode_splitline
 2110EQUD 0                        \ mode_aligncaret
 2120EQUD 0                        \ mode_command
 2130EQUD 0                        \ mode_compile
 2140EQUD 0                        \ mode_formattext
 2150EQUD 0                        \ mode_run
 2160EQUD 0                        \ mode_runandquit
 2170EQUD 0                        \ mode_basic
 2180EQUD 0                        \ mode_search
 2190EQUD 0                        \ mode_replace
 2200EQUD 0                        \ mode_selection
 2210EQUD 0                        \ mode_click
 2220EQUD 0                        \ mode_message
 2230EQUD 0                        \ mode_setwidth
 2240.mode_table_end
 2250
 2260.mode_title                   \ mode title
 2270FNS(mode_name$)
 2280
 2290.mode_author                  \ mode author
 2300FNS(mode_author$)
 2310
 2320.Null                         \ offset to send entry points you
 2330MOV PC,R14                    \ don't want to do anything
 2340
 2350.mode_start
 2360FNJSR
 2370BL get_mode_number
 2380FNcall(Zap_RestoreModeWord)
 2390FNRTS
 2400
 2410.mode_end
 2420FNJSR
 2430BL get_mode_number
 2440FNcall(Zap_SaveModeWord)
 2450FNRTS
 2460
 3550\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 3560\ Initialise buffers                                           \
 3570\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 3580
 3590.mode_init                    \ initialise entry point
 3600TEQ R1,#1
 3610BEQ store_mode_number
 3620TEQ R1,#2
 3630BEQ zap_starting
 3640MOV PC,R14
 3650
 3660.zap_starting                 \ initialise the mode word if 0
 3670STMFD R13!,{R1,R8,R14}
 3680MOV R8,#0                     \ options word
 3690BL get_mode_number
 3700MOV R1,R0
 3710FNcall(Zap_GetModeWord)
 3720LDMVSFD R13!,{R1,R8,PC}
 3730TEQ R0,#0                     \ have any options been set for
 3740LDMNEFD R13!,{R1,R8,PC}       \ this mode - return if so
 3750LDR R0,default_mode_word
 3760FNcall(Zap_PutModeWord)
 3770LDMFD R13!,{R1,R8,PC}
 3780
 3790.default_mode_word
 3800EQUD &10010050                \ auto indent+tabs+80 cols
 3810
 3820\E R0=mode number
 3830\X -
 3840
 3850.store_mode_number
 3860STR R0,actual_mode_number
 3870MOV PC,R14
 3880
 3890\E -
 3900\X R0=mode number
 3910
 3920.get_mode_number
 3930LDR R0,actual_mode_number
 3940MOV PC,R14
 3950
 3960.actual_mode_number
 3970EQUD 0
 3980
 3990\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 4000\ Command table                                             \
 4010\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 4020
 4030.key_command_table
 4040EQUD key_command_table
 4050EQUD 0                        \ flags
 4060FNcom("BEEPBEEP",beepbeep)
 4070EQUD 0                        \ end
 4080
 4090EQUD 7
 4100.beepbeep
 4110FNJSR
 4120SWI &107
 4130SWI &107
 4140FNRTS
 4150
 4160\\\\\\\\\\ End Of Assembly \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 4170
 4180]
 4190
 4200NEXT pass
 4210length%=P%
 4220ENDPROC
 4230
 4240DEF FNS(A$)    :[OPTpass:EQUS A$+CHR$0:ALIGN:]:=""
 4250DEF FNSS(A$)   :[OPTpass:SWI "XOS_WriteS":EQUS A$+CHR$0:ALIGN:]:=""
 4260DEF FNJSR      :[OPTpass:STMFD   R13!,{R14}:]:=""
 4270DEF FNRTV      :[OPTpass:LDMFD   R13!,{R14}:ORRS PC,R14,#Vflag%:]:=""
 4280DEF FNRTC      :[OPTpass:LDMFD   R13!,{R14}:BICS PC,R14,#Vflag%:]:=""
 4290DEF FNRTS      :[OPTpass:LDMFD   R13!,{PC} :]:=""
 4300DEF FNRTSNE    :[OPTpass:LDMNEFD R13!,{PC}:]:=""
 4310DEF FNRTSEQ    :[OPTpass:LDMEQFD R13!,{PC}:]:=""
 4320DEF FNRTSCS    :[OPTpass:LDMCSFD R13!,{PC}:]:=""
 4330DEF FNRTSCC    :[OPTpass:LDMCCFD R13!,{PC}:]:=""
 4340DEF FNRTSVS    :[OPTpass:LDMVSFD R13!,{PC}:]:=""
 4350DEF FNRTSVC    :[OPTpass:LDMVCFD R13!,{PC}:]:=""
 4360DEF FNRTSLS    :[OPTpass:LDMLSFD R13!,{PC}:]:=""
 4370DEF FNRTSHI    :[OPTpass:LDMHIFD R13!,{PC}:]:=""
 4380DEF FNRTSMI    :[OPTpass:LDMMIFD R13!,{PC}:]:=""
 4390DEF FNRTSLE    :[OPTpass:LDMLEFD R13!,{PC}:]:=""
 4400DEF FNRTSGE    :[OPTpass:LDMGEFD R13!,{PC}:]:=""
 4410DEF FNRTSLT    :[OPTpass:LDMLTFD R13!,{PC}:]:=""
 4420DEF FNRTSS     :[OPTpass:LDMFD   R13!,{PC}^:]:=""
 4430DEF FNRTSSNE   :[OPTpass:LDMNEFD R13!,{PC}^:]:=""
 4440DEF FNRTSSEQ   :[OPTpass:LDMEQFD R13!,{PC}^:]:=""
 4450DEF FNRTSSCC   :[OPTpass:LDMCCFD R13!,{PC}^:]:=""
 4460DEF FNRTSSCS   :[OPTpass:LDMCSFD R13!,{PC}^:]:=""
 4470DEF FNmem(x%)  :w%=O%-code%:P%=P%+x%:O%=O%+x%:[OPTpass:ALIGN:]:=w%
 4480DEF FNnewl     :[OPTpass:SWI "XOS_NewLine":]:=""
 4490
 4500DEF FNdate      DIM date% 64:?date%=3:SYS "OS_Word",&0E,date%
 4510SYS "OS_ConvertDateAndTime",date%,date%+16,32,"%DY %M3 19%YR" TO A%,B%
 4520?B%=13:=$A%
 4530
 4540REM This modules workspace is at R11!!
 4550
 4560DEF FNLDR(s%,x%)  :[OPTpass:LDR   s%,[R11,#x%]:]:=""
 4570DEF FNLDREQ(s%,x%):[OPTpass:LDREQ s%,[R11,#x%]:]:=""
 4580DEF FNLDRNE(s%,x%):[OPTpass:LDRNE s%,[R11,#x%]:]:=""
 4590DEF FNLDRCS(s%,x%):[OPTpass:LDRCS s%,[R11,#x%]:]:=""
 4600DEF FNLDRCC(s%,x%):[OPTpass:LDRCC s%,[R11,#x%]:]:=""
 4610DEF FNSTR(s%,x%)  :[OPTpass:STR   s%,[R11,#x%]:]:=""
 4620DEF FNSTREQ(s%,x%):[OPTpass:STREQ s%,[R11,#x%]:]:=""
 4630DEF FNSTRNE(s%,x%):[OPTpass:STRNE s%,[R11,#x%]:]:=""
 4640DEF FNSTRVS(s%,x%):[OPTpass:STRVS s%,[R11,#x%]:]:=""
 4650
 4660REM Menu creation functions
 4670
 4680DEF FNnew_menu(T$,w%,c%)
 4690a%=P%
 4700menu_num%=0
 4710[OPTpass
 4720EQUS T$+STRING$(12-LENT$,CHR$0)         \ title
 4730EQUD w%<<4                              \ width in os
 4740EQUD c%                                 \ offset of sub to create this
 4750]
 4760=a%
 4770
 4780DEF FNnme(T$,f%,s%,k%,i%)
 4790IF s%=-1 AND pass=14 THEN f%=(f% OR 8):s%=mw_window
 4800IF i%=1 AND pass=14 THEN i%=sub_kcommand
 4810IF i%=2 AND pass=14 THEN i%=sub_call
 4820[OPTpass
 4830EQUD f%                       \ flags
 4840EQUD s%                       \ submenu pointer
 4850EQUD k%                       \ key
 4860EQUD i%                       \ interprate
 4870FNS(T$)                       \ menu text
 4880]
 4890menu_num%+=1
 4900=menu_num%-1
 4910
 4920DEF FNend_menu
 4930IF menu_num%=0 THEN PRINT"Menu NULL!":END
 4940[OPTpass
 4950EQUD -1                       \ terminator
 4960]
 4970=menu_num%
 4980
 4990DEF FNw_leaf(T$,w%,c%,i%)
 5000b%=FNnew_menu(T$,10,c%)
 5010a%=FNnme("",4+(w%<<8),0,0,i%)
 5020a%=FNend_menu
 5030=b%
 5040
 5050DEF FNADR(s%,x%)
 5060REM The instruction sequence must be of FIXED length
 5070a%=x%-P%-8
 5080IF a%>=0 THEN
 5090 [OPTpass:ADD s%,PC,#(a% AND &000003FF):ADD s%,s%,#(a% AND &FFFFFC00):]
 5100ELSE
 5110 a%=-a%
 5120 [OPTpass:SUB s%,PC,#(a% AND &000003FF):SUB s%,s%,#(a% AND &FFFFFC00):]
 5130ENDIF
 5140=""
 5150
 5160DEF FNMOV(s%,x%)
 5170REM perform MOV s%,#x% on second pass only (variable may not exist)
 5180IF (pass AND 2)<>0 THEN
 5190 [OPTpass:MOV s%,#x%:]
 5200ELSE
 5210 [OPTpass:MOV s%,#0:]
 5220ENDIF
 5230=""
 5240
 5250DEF FNTEQ(s%,x%)
 5260REM perform TEQ s%,#x% on second pass only (variable may not exist)
 5270IF (pass AND 2)<>0 THEN
 5280 [OPTpass:TEQ s%,#x%:]
 5290ELSE
 5300 [OPTpass:TEQ s%,#0:]
 5310ENDIF
 5320=""
 5330
 5340DEF FNtickeq(s%,x%)
 5350[OPTpass
 5360LDR R0,[s%,#(28+24*x%)]
 5370ORREQ R0,R0,#1
 5380BICNE R0,R0,#1
 5390STR R0,[s%,#(28+24*x%)]
 5400]:=""
 5410
 5420DEF FNtickne(s%,x%)
 5430[OPTpass
 5440LDR R0,[s%,#(28+24*x%)]
 5450ORRNE R0,R0,#1
 5460BICEQ R0,R0,#1
 5470STR R0,[s%,#(28+24*x%)]
 5480]:=""
 5490
 5500DEF PROCerror
 5510REPORT:PRINT" at line ";ERL
 5520END
 5530
 5540DEF FNerr(a%,T$)
 5550[OPTpass:ADD R0,PC,#0:ORRS PC,R14,#Vflag%:EQUD a%:FNS(T$):]:=""
 5560
 5570DEF FNcom(T$,a%)
 5580[OPTpass:EQUS T$:EQUB 0:]
 5590!O%=0     :REM zero next four bytes
 5600[OPTpass:ALIGN:EQUD a%:]:=""
 5610
 5620REM Call zap at entry offset a% Entry R0-R11=args R12=zap workspace
 5630DEF FNcall(a%)
 5640[OPTpass
 5650LDR R14,[R12]                 \ get start of zap table
 5660ADD R14,R14,#a%               \ get address of sub
 5670STMFD R13!,{R14}              \ save address on stack
 5680MOV R14,PC                    \ return address (with flags)
 5690LDMFD R13!,{PC}               \ call the sub
 5700]:=""
 5710

� E-Template
�
.� Template program for creating Zap modes.
(1� The module will be saved to work_directory$
2@� You should run Zap first to ensure Zap$Dir and ZapWork$Dir
<� are set up.
F
P� directory to save module
Z#work_directory$="<ZapWork$Dir>"
d
n� name of mode
xmode_name$="Test"
�
�� authors name
�mode_author$="Joe Bloggs"
�
�� version number of module
�ver$="0.01"
�
� � mode number you want to be
�?� you MUST not hard wire this in as I may have allocated it
�� to someone else!
�mode_number=15
�
�&� mode to base this mode on (text)
mode_basemode=0

>� define a proc error to print line number even if running
"� under wimp.
,� � �error
6
@(� reserve space for code / workspace
J� default of 64k
Tcode_size%=&10000 
^� code% code_size%
hL%=code%+code_size%
r
|0� load the library defineing zap's variables
�%ț "<ZapWork$Dir>.Docs.E-Library"
�
�,� define zaps constants (call E-Library)
��define_zap_variables
�
�+� define any variables in our workspace
��set_up_variables
�
�� assemble the code
��assemble_code
�
�� save the module
�Qș "OS_File",&0A,work_directory$+".Zap"+mode_name$,&FFA,0,code%,code%+length%
2� "Zap";mode_name$+" module created and saved"

�
&
0C� define any variables we want to store in the module workspace
:
D� �set_up_variables
N3� pass=%1100 � %1110 � 2:P%=0:O%=code%:[OPTpass
X
b.test_0             EQUD 0
l.test_1             EQUD 0
v.test_2             EQUD 0
�.test_3             EQUD 0
�
�]:�
�variable_size%=P%
��
�
�� assemble the main code
�
�� �assemble_code
�
�� define flags
�
�Iflag%=1<<27
Vflag%=1<<28
Cflag%=1<<29

 *� define register numbers (for macros)
*
4<R0=0:R1=1:R2=2:R3=3:R4=4:R5=5:R6=6:R7=7:R8=8:R9=9:R10=10
>,R11=11:R12=12:R13=13:R14=14:R15=15:PC=15
H
R*� pass=%1100 � %1110 � 2:P%=0:O%=code%
\[OPTpass
f
p.Module_header
z .Start_code           EQUD 0
�..Initialisation_code  EQUD initialise_code
�,.Finalisation_code    EQUD finalise_code
� .Service_call_handler EQUD 0
�+.Title_string         EQUD title_string
�*.Help_string          EQUD help_string
� .Command_keyword_tab  EQUD 0
� .SWI_chunk_number     EQUD 0
� .SWI_handler_code     EQUD 0
� .SWI_decoding_table   EQUD 0
� .SWI_decoding_code    EQUD 0
�
�D\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
�B\ TITLES � COMMAND TABLES                                    \
D\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

.help_string
$?�S("Zap"+mode_name$+�9+ver$+" ("+�date+") � "+mode_author$)
.
8.title_string
B�S("Zap"+mode_name$)
L
VD\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
`B\ INITIALISE � FINALISE                                      \
jD\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
t
~.initialise_code
��JSR
�
MOV R0,#6
�MOV R3,#variable_size%
�;SWI "XOS_Module"              \ claim varable workspace
�
�RTSVS
�CMOV R11,R2                    \ claimed block (R11 from now on)
�@STR R11,[R12]                 \ save as my workspace pointer
�=STR R11,workspace_address     \ save it in the module for
�7MOV R0,#18                    \ accessing commands.
�ADR R1,zap_title
�,SWI "XOS_Module"              \ find zap
�,�RTSVS                       \ not found
1MOV R12,R4                    \ zap workspace

�ADR(R0,mode_table)
7�call(Zap_AddMode)           \ add this mode to zap

�RTSVS
(8�ADR(R0,key_command_table)   \ add table of commands
2<�call(Zap_AddCommands)       \ remove this if you're not
F1�RTSVS                       \ using commands
P
MOV R1,#0
ZMOV R2,R11
dMOV R3,#variable_size%
n;�call(Zap_FillWords)         \ clear workspace to zeros
x�RTS
�
�.zap_title
�
�S("Zap")
�
�.workspace_address
�
EQUD 0
�
�\X R11=module workspace |
�
�.get_workspace
�LDR R11,workspace_address
�MOV PC,R14
�
.finalise_code
�JSR

MOV R0,#7
"LDR R2,[R12]
,2SWI "XOS_Module"              \ free workspace
6
�RTSVS
@
MOV R0,#0
J5STR R0,[R12]                  \ null private word
T�RTS
^
hD\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
rD\ Mode Table                                                   \
|D\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
�
�.mode_table
�8EQUD mode_table               \ offset of mode table
�5EQUD mode_title               \ mode title string
�1EQUD mode_author              \ author string
�4EQUD mode_basemode            \ base mode number
�7EQUD mode_number              \ mode you want to be
�AEQUD mode_init                \ offset of initialisation code
�7EQUD 0                        \ offset of your menu
�4EQUD mode_table_end-mode_table \ length of table
�
�1EQUD 0                        \ mode_postload
�0EQUD 0                        \ mode_presave
0EQUD 0                        \ mode_loading
EQUD mode_start
EQUD mode_end
&.EQUD 0                        \ mode_width
00EQUD 0                        \ mode_linecol
:0EQUD 0                        \ mode_lineoff
D/EQUD 0                        \ mode_clnlog
N/EQUD 0                        \ mode_clnphy
X/EQUD 0                        \ mode_clnoff
b1EQUD 0                        \ mode_nextline
l.EQUD 0                        \ mode_minus
v-EQUD 0                        \ mode_plus
�/EQUD 0                        \ mode_sminus
�.EQUD 0                        \ mode_splus
�/EQUD 0                        \ mode_cminus
�.EQUD 0                        \ mode_cplus
�3EQUD 0                        \ mode_redrawline
�3EQUD 0                        \ mode_redrawlnum
�-EQUD 0                        \ mode_char
�/EQUD 0                        \ mode_delete
�,EQUD 0                        \ mode_tab
�/EQUD 0                        \ mode_return
�1EQUD 0                        \ mode_renumber
�3EQUD 0                        \ mode_saveandrun
�2EQUD 0                        \ mode_linestart
0EQUD 0                        \ mode_lineend
1EQUD 0                        \ mode_linenext
1EQUD 0                        \ mode_lineprev
 -EQUD 0                        \ mode_copy
*1EQUD 0                        \ mode_joinline
42EQUD 0                        \ mode_splitline
>3EQUD 0                        \ mode_aligncaret
H0EQUD 0                        \ mode_command
R0EQUD 0                        \ mode_compile
\3EQUD 0                        \ mode_formattext
f,EQUD 0                        \ mode_run
p3EQUD 0                        \ mode_runandquit
z.EQUD 0                        \ mode_basic
�/EQUD 0                        \ mode_search
�0EQUD 0                        \ mode_replace
�2EQUD 0                        \ mode_selection
�.EQUD 0                        \ mode_click
�0EQUD 0                        \ mode_message
�1EQUD 0                        \ mode_setwidth
�.mode_table_end
�
�..mode_title                   \ mode title
��S(mode_name$)
�
�/.mode_author                  \ mode author
��S(mode_author$)
	
	C.Null                         \ offset to send entry points you
	=MOV PC,R14                    \ don't want to do anything
	$
	..mode_start
	8�JSR
	BBL get_mode_number
	L�call(Zap_RestoreModeWord)
	V�RTS
	`
	j
.mode_end
	t�JSR
	~BL get_mode_number
	��call(Zap_SaveModeWord)
	��RTS
	�

�D\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

�D\ Initialise buffers                                           \

�D\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

�
:.mode_init                    \ initialise entry point

TEQ R1,#1
BEQ store_mode_number
$
TEQ R1,#2
.BEQ zap_starting
8MOV PC,R14
B
LA.zap_starting                 \ initialise the mode word if 0
VSTMFD R13!,{R1,R8,R14}
`0MOV R8,#0                     \ options word
jBL get_mode_number
t
MOV R1,R0
~�call(Zap_GetModeWord)
�LDMVSFD R13!,{R1,R8,PC}
�ATEQ R0,#0                     \ have any options been set for
�<LDMNEFD R13!,{R1,R8,PC}       \ this mode - return if so
�LDR R0,default_mode_word
��call(Zap_PutModeWord)
�LDMFD R13!,{R1,R8,PC}
�
�.default_mode_word
�<EQUD &10010050                \ auto indent+tabs+80 cols
�
�\E R0=mode number
�\X -


.store_mode_number
STR R0,actual_mode_number
MOV PC,R14
(
2\E -
<\X R0=mode number
F
P.get_mode_number
ZLDR R0,actual_mode_number
dMOV PC,R14
n
x.actual_mode_number
�
EQUD 0
�
�A\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
�A\ Command table                                             \
�A\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
�
�.key_command_table
�EQUD key_command_table
�)EQUD 0                        \ flags
��com("BEEPBEEP",beepbeep)
�'EQUD 0                        \ end
�
�
EQUD 7

.beepbeep
�JSR
SWI &107
"SWI &107
,�RTS
6
@@\\\\\\\\\\ End Of Assembly \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
J
T]
^
h
� pass
rlength%=P%
|�
�
�0� �S(A$)    :[OPTpass:EQUS A$+�0:ALIGN:]:=""
�A� �SS(A$)   :[OPTpass:SWI "XOS_WriteS":EQUS A$+�0:ALIGN:]:=""
�2� �JSR      :[OPTpass:STMFD   R13!,{R14}:]:=""
�E� �RTV      :[OPTpass:LDMFD   R13!,{R14}:�RS PC,R14,#Vflag%:]:=""
�F� �RTC      :[OPTpass:LDMFD   R13!,{R14}:BICS PC,R14,#Vflag%:]:=""
�2� �RTS      :[OPTpass:LDMFD   R13!,{PC} :]:=""
�1� �RTSNE    :[OPTpass:LDMNEFD R13!,{PC}:]:=""
�1� �RTSEQ    :[OPTpass:LDMEQFD R13!,{PC}:]:=""
�1� �RTSCS    :[OPTpass:LDMCSFD R13!,{PC}:]:=""
�1� �RTSCC    :[OPTpass:LDMCCFD R13!,{PC}:]:=""
�1� �RTSVS    :[OPTpass:LDMVSFD R13!,{PC}:]:=""
�1� �RTSVC    :[OPTpass:LDMVCFD R13!,{PC}:]:=""
1� �RTSLS    :[OPTpass:LDMLSFD R13!,{PC}:]:=""
1� �RTSHI    :[OPTpass:LDMHIFD R13!,{PC}:]:=""
1� �RTSMI    :[OPTpass:LDMMIFD R13!,{PC}:]:=""
&1� �RTSLE    :[OPTpass:LDMLEFD R13!,{PC}:]:=""
01� �RTSGE    :[OPTpass:LDMGEFD R13!,{PC}:]:=""
:1� �RTSLT    :[OPTpass:LDMLTFD R13!,{PC}:]:=""
D2� �RTSS     :[OPTpass:LDMFD   R13!,{PC}^:]:=""
N2� �RTSSNE   :[OPTpass:LDMNEFD R13!,{PC}^:]:=""
X2� �RTSSEQ   :[OPTpass:LDMEQFD R13!,{PC}^:]:=""
b2� �RTSSCC   :[OPTpass:LDMCCFD R13!,{PC}^:]:=""
l2� �RTSSCS   :[OPTpass:LDMCSFD R13!,{PC}^:]:=""
vC� �mem(x%)  :w%=O%-code%:P%=P%+x%:O%=O%+x%:[OPTpass:ALIGN:]:=w%
�1� �newl     :[OPTpass:SWI "XOS_NewLine":]:=""
�
�;� �date      � date% 64:?date%=3:ș "OS_Word",&0E,date%
�Hș "OS_ConvertDateAndTime",date%,date%+16,32,"%DY %M3 19%YR" � A%,B%
�?B%=13:=$A%
�
�(� This modules workspace is at R11!!
�
�5� �LDR(s%,x%)  :[OPTpass:LDR   s%,[R11,#x%]:]:=""
�5� �LDREQ(s%,x%):[OPTpass:LDREQ s%,[R11,#x%]:]:=""
�5� �LDRNE(s%,x%):[OPTpass:LDRNE s%,[R11,#x%]:]:=""
�5� �LDRCS(s%,x%):[OPTpass:LDRCS s%,[R11,#x%]:]:=""
�5� �LDRCC(s%,x%):[OPTpass:LDRCC s%,[R11,#x%]:]:=""
5� �STR(s%,x%)  :[OPTpass:STR   s%,[R11,#x%]:]:=""
5� �STREQ(s%,x%):[OPTpass:STREQ s%,[R11,#x%]:]:=""
5� �STRNE(s%,x%):[OPTpass:STRNE s%,[R11,#x%]:]:=""
 5� �STRVS(s%,x%):[OPTpass:STRVS s%,[R11,#x%]:]:=""
*
4� Menu creation functions
>
H� �new_menu(T$,w%,c%)
R	a%=P%
\menu_num%=0
f[OPTpass
p'EQUS T$+�12-�T$,�0)         \ title
z9EQUD w%<<4                              \ width in os
�JEQUD c%                                 \ offset of sub to create this
�]
�=a%
�
�� �nme(T$,f%,s%,k%,i%)
�0� s%=-1 � pass=14 � f%=(f% � 8):s%=mw_window
�&� i%=1 � pass=14 � i%=sub_kcommand
�"� i%=2 � pass=14 � i%=sub_call
�[OPTpass
�)EQUD f%                       \ flags
�3EQUD s%                       \ submenu pointer
�'EQUD k%                       \ key
�.EQUD i%                       \ interprate
,�S(T$)                       \ menu text
]
menu_num%+=1
$=menu_num%-1
.
8� �end_menu
B#� menu_num%=0 � �"Menu NULL!":�
L[OPTpass
V.EQUD -1                       \ terminator
`]
j=menu_num%
t
~� �w_leaf(T$,w%,c%,i%)
�b%=�new_menu(T$,10,c%)
� a%=�nme("",4+(w%<<8),0,0,i%)
�a%=�end_menu
�=b%
�
�� �ADR(s%,x%)
�6� The instruction sequence must be of FIXED length
�a%=x%-P%-8
�
� a%>=0 �
�G [OPTpass:ADD s%,PC,#(a% � &000003FF):ADD s%,s%,#(a% � &FFFFFC00):]
��
� a%=-a%
G [OPTpass:SUB s%,PC,#(a% � &000003FF):SUB s%,s%,#(a% � &FFFFFC00):]

�
=""

(� �MOV(s%,x%)
2E� perform MOV s%,#x% on second pass only (variable may not exist)
<� (pass � 2)<>0 �
F [OPTpass:MOV s%,#x%:]
P�
Z [OPTpass:MOV s%,#0:]
d�
n=""
x
�� �TEQ(s%,x%)
�E� perform TEQ s%,#x% on second pass only (variable may not exist)
�� (pass � 2)<>0 �
� [OPTpass:TEQ s%,#x%:]
��
� [OPTpass:TEQ s%,#0:]
��
�=""
�
�� �tickeq(s%,x%)
�[OPTpass
�LDR R0,[s%,#(28+24*x%)]
��REQ R0,R0,#1
BICNE R0,R0,#1
STR R0,[s%,#(28+24*x%)]
	]:=""
"
,� �tickne(s%,x%)
6[OPTpass
@LDR R0,[s%,#(28+24*x%)]
J�RNE R0,R0,#1
TBICEQ R0,R0,#1
^STR R0,[s%,#(28+24*x%)]
h	]:=""
r
|� �error
��:�" at line ";�
��
�
�� �err(a%,T$)
�A[OPTpass:ADD R0,PC,#0:�RS PC,R14,#Vflag%:EQUD a%:�S(T$):]:=""
�
�� �com(T$,a%)
�[OPTpass:EQUS T$:EQUB 0:]
�%!O%=0     :� zero next four bytes
� [OPTpass:ALIGN:EQUD a%:]:=""
�
�E� Call zap at entry offset a% Entry R0-R11=args R12=zap workspace
�� �call(a%)
[OPTpass
:LDR R14,[R12]                 \ get start of zap table
6ADD R14,R14,#a%               \ get address of sub
&9STMFD R13!,{R14}              \ save address on stack
0?MOV R14,PC                    \ return address (with flags)
:0LDMFD R13!,{PC}               \ call the sub
D	]:=""
N
�
00000000  0d 00 0a 10 f4 20 45 2d  54 65 6d 70 6c 61 74 65  |..... E-Template|
00000010  0d 00 14 05 f4 0d 00 1e  2e f4 20 54 65 6d 70 6c  |.......... Templ|
00000020  61 74 65 20 70 72 6f 67  72 61 6d 20 66 6f 72 20  |ate program for |
00000030  63 72 65 61 74 69 6e 67  20 5a 61 70 20 6d 6f 64  |creating Zap mod|
00000040  65 73 2e 0d 00 28 31 f4  20 54 68 65 20 6d 6f 64  |es...(1. The mod|
00000050  75 6c 65 20 77 69 6c 6c  20 62 65 20 73 61 76 65  |ule will be save|
00000060  64 20 74 6f 20 77 6f 72  6b 5f 64 69 72 65 63 74  |d to work_direct|
00000070  6f 72 79 24 0d 00 32 40  f4 20 59 6f 75 20 73 68  |ory$..2@. You sh|
00000080  6f 75 6c 64 20 72 75 6e  20 5a 61 70 20 66 69 72  |ould run Zap fir|
00000090  73 74 20 74 6f 20 65 6e  73 75 72 65 20 5a 61 70  |st to ensure Zap|
000000a0  24 44 69 72 20 61 6e 64  20 5a 61 70 57 6f 72 6b  |$Dir and ZapWork|
000000b0  24 44 69 72 0d 00 3c 11  f4 20 61 72 65 20 73 65  |$Dir..<.. are se|
000000c0  74 20 75 70 2e 0d 00 46  04 0d 00 50 1e f4 20 64  |t up...F...P.. d|
000000d0  69 72 65 63 74 6f 72 79  20 74 6f 20 73 61 76 65  |irectory to save|
000000e0  20 6d 6f 64 75 6c 65 0d  00 5a 23 77 6f 72 6b 5f  | module..Z#work_|
000000f0  64 69 72 65 63 74 6f 72  79 24 3d 22 3c 5a 61 70  |directory$="<Zap|
00000100  57 6f 72 6b 24 44 69 72  3e 22 0d 00 64 04 0d 00  |Work$Dir>"..d...|
00000110  6e 12 f4 20 6e 61 6d 65  20 6f 66 20 6d 6f 64 65  |n.. name of mode|
00000120  0d 00 78 15 6d 6f 64 65  5f 6e 61 6d 65 24 3d 22  |..x.mode_name$="|
00000130  54 65 73 74 22 0d 00 82  04 0d 00 8c 12 f4 20 61  |Test"......... a|
00000140  75 74 68 6f 72 73 20 6e  61 6d 65 0d 00 96 1d 6d  |uthors name....m|
00000150  6f 64 65 5f 61 75 74 68  6f 72 24 3d 22 4a 6f 65  |ode_author$="Joe|
00000160  20 42 6c 6f 67 67 73 22  0d 00 a0 04 0d 00 aa 1e  | Bloggs"........|
00000170  f4 20 76 65 72 73 69 6f  6e 20 6e 75 6d 62 65 72  |. version number|
00000180  20 6f 66 20 6d 6f 64 75  6c 65 0d 00 b4 0f 76 65  | of module....ve|
00000190  72 24 3d 22 30 2e 30 31  22 0d 00 be 04 0d 00 c8  |r$="0.01".......|
000001a0  20 f4 20 6d 6f 64 65 20  6e 75 6d 62 65 72 20 79  | . mode number y|
000001b0  6f 75 20 77 61 6e 74 20  74 6f 20 62 65 0d 00 d2  |ou want to be...|
000001c0  3f f4 20 79 6f 75 20 4d  55 53 54 20 6e 6f 74 20  |?. you MUST not |
000001d0  68 61 72 64 20 77 69 72  65 20 74 68 69 73 20 69  |hard wire this i|
000001e0  6e 20 61 73 20 49 20 6d  61 79 20 68 61 76 65 20  |n as I may have |
000001f0  61 6c 6c 6f 63 61 74 65  64 20 69 74 0d 00 dc 16  |allocated it....|
00000200  f4 20 74 6f 20 73 6f 6d  65 6f 6e 65 20 65 6c 73  |. to someone els|
00000210  65 21 0d 00 e6 12 6d 6f  64 65 5f 6e 75 6d 62 65  |e!....mode_numbe|
00000220  72 3d 31 35 0d 00 f0 04  0d 00 fa 26 f4 20 6d 6f  |r=15.......&. mo|
00000230  64 65 20 74 6f 20 62 61  73 65 20 74 68 69 73 20  |de to base this |
00000240  6d 6f 64 65 20 6f 6e 20  28 74 65 78 74 29 0d 01  |mode on (text)..|
00000250  04 13 6d 6f 64 65 5f 62  61 73 65 6d 6f 64 65 3d  |..mode_basemode=|
00000260  30 0d 01 0e 04 0d 01 18  3e f4 20 64 65 66 69 6e  |0.......>. defin|
00000270  65 20 61 20 70 72 6f 63  20 65 72 72 6f 72 20 74  |e a proc error t|
00000280  6f 20 70 72 69 6e 74 20  6c 69 6e 65 20 6e 75 6d  |o print line num|
00000290  62 65 72 20 65 76 65 6e  20 69 66 20 72 75 6e 6e  |ber even if runn|
000002a0  69 6e 67 0d 01 22 11 f4  20 75 6e 64 65 72 20 77  |ing..".. under w|
000002b0  69 6d 70 2e 0d 01 2c 0e  ee 20 85 20 f2 65 72 72  |imp...,.. . .err|
000002c0  6f 72 0d 01 36 04 0d 01  40 28 f4 20 72 65 73 65  |or..6...@(. rese|
000002d0  72 76 65 20 73 70 61 63  65 20 66 6f 72 20 63 6f  |rve space for co|
000002e0  64 65 20 2f 20 77 6f 72  6b 73 70 61 63 65 0d 01  |de / workspace..|
000002f0  4a 14 f4 20 64 65 66 61  75 6c 74 20 6f 66 20 36  |J.. default of 6|
00000300  34 6b 0d 01 54 16 63 6f  64 65 5f 73 69 7a 65 25  |4k..T.code_size%|
00000310  3d 26 31 30 30 30 30 20  0d 01 5e 16 de 20 63 6f  |=&10000 ..^.. co|
00000320  64 65 25 20 63 6f 64 65  5f 73 69 7a 65 25 0d 01  |de% code_size%..|
00000330  68 17 4c 25 3d 63 6f 64  65 25 2b 63 6f 64 65 5f  |h.L%=code%+code_|
00000340  73 69 7a 65 25 0d 01 72  04 0d 01 7c 30 f4 20 6c  |size%..r...|0. l|
00000350  6f 61 64 20 74 68 65 20  6c 69 62 72 61 72 79 20  |oad the library |
00000360  64 65 66 69 6e 65 69 6e  67 20 7a 61 70 27 73 20  |defineing zap's |
00000370  76 61 72 69 61 62 6c 65  73 0d 01 86 25 c8 9b 20  |variables...%.. |
00000380  22 3c 5a 61 70 57 6f 72  6b 24 44 69 72 3e 2e 44  |"<ZapWork$Dir>.D|
00000390  6f 63 73 2e 45 2d 4c 69  62 72 61 72 79 22 0d 01  |ocs.E-Library"..|
000003a0  90 04 0d 01 9a 2c f4 20  64 65 66 69 6e 65 20 7a  |.....,. define z|
000003b0  61 70 73 20 63 6f 6e 73  74 61 6e 74 73 20 28 63  |aps constants (c|
000003c0  61 6c 6c 20 45 2d 4c 69  62 72 61 72 79 29 0d 01  |all E-Library)..|
000003d0  a4 19 f2 64 65 66 69 6e  65 5f 7a 61 70 5f 76 61  |...define_zap_va|
000003e0  72 69 61 62 6c 65 73 0d  01 ae 04 0d 01 b8 2b f4  |riables.......+.|
000003f0  20 64 65 66 69 6e 65 20  61 6e 79 20 76 61 72 69  | define any vari|
00000400  61 62 6c 65 73 20 69 6e  20 6f 75 72 20 77 6f 72  |ables in our wor|
00000410  6b 73 70 61 63 65 0d 01  c2 15 f2 73 65 74 5f 75  |kspace.....set_u|
00000420  70 5f 76 61 72 69 61 62  6c 65 73 0d 01 cc 04 0d  |p_variables.....|
00000430  01 d6 17 f4 20 61 73 73  65 6d 62 6c 65 20 74 68  |.... assemble th|
00000440  65 20 63 6f 64 65 0d 01  e0 12 f2 61 73 73 65 6d  |e code.....assem|
00000450  62 6c 65 5f 63 6f 64 65  0d 01 ea 04 0d 01 f4 15  |ble_code........|
00000460  f4 20 73 61 76 65 20 74  68 65 20 6d 6f 64 75 6c  |. save the modul|
00000470  65 0d 01 fe 51 c8 99 20  22 4f 53 5f 46 69 6c 65  |e...Q.. "OS_File|
00000480  22 2c 26 30 41 2c 77 6f  72 6b 5f 64 69 72 65 63  |",&0A,work_direc|
00000490  74 6f 72 79 24 2b 22 2e  5a 61 70 22 2b 6d 6f 64  |tory$+".Zap"+mod|
000004a0  65 5f 6e 61 6d 65 24 2c  26 46 46 41 2c 30 2c 63  |e_name$,&FFA,0,c|
000004b0  6f 64 65 25 2c 63 6f 64  65 25 2b 6c 65 6e 67 74  |ode%,code%+lengt|
000004c0  68 25 0d 02 08 32 f1 20  22 5a 61 70 22 3b 6d 6f  |h%...2. "Zap";mo|
000004d0  64 65 5f 6e 61 6d 65 24  2b 22 20 6d 6f 64 75 6c  |de_name$+" modul|
000004e0  65 20 63 72 65 61 74 65  64 20 61 6e 64 20 73 61  |e created and sa|
000004f0  76 65 64 22 0d 02 12 04  0d 02 1c 05 e0 0d 02 26  |ved"...........&|
00000500  04 0d 02 30 43 f4 20 64  65 66 69 6e 65 20 61 6e  |...0C. define an|
00000510  79 20 76 61 72 69 61 62  6c 65 73 20 77 65 20 77  |y variables we w|
00000520  61 6e 74 20 74 6f 20 73  74 6f 72 65 20 69 6e 20  |ant to store in |
00000530  74 68 65 20 6d 6f 64 75  6c 65 20 77 6f 72 6b 73  |the module works|
00000540  70 61 63 65 0d 02 3a 04  0d 02 44 17 dd 20 f2 73  |pace..:...D.. .s|
00000550  65 74 5f 75 70 5f 76 61  72 69 61 62 6c 65 73 0d  |et_up_variables.|
00000560  02 4e 33 e3 20 70 61 73  73 3d 25 31 31 30 30 20  |.N3. pass=%1100 |
00000570  b8 20 25 31 31 31 30 20  88 20 32 3a 50 25 3d 30  |. %1110 . 2:P%=0|
00000580  3a 4f 25 3d 63 6f 64 65  25 3a 5b 4f 50 54 70 61  |:O%=code%:[OPTpa|
00000590  73 73 0d 02 58 04 0d 02  62 1e 2e 74 65 73 74 5f  |ss..X...b..test_|
000005a0  30 20 20 20 20 20 20 20  20 20 20 20 20 20 45 51  |0             EQ|
000005b0  55 44 20 30 0d 02 6c 1e  2e 74 65 73 74 5f 31 20  |UD 0..l..test_1 |
000005c0  20 20 20 20 20 20 20 20  20 20 20 20 45 51 55 44  |            EQUD|
000005d0  20 30 0d 02 76 1e 2e 74  65 73 74 5f 32 20 20 20  | 0..v..test_2   |
000005e0  20 20 20 20 20 20 20 20  20 20 45 51 55 44 20 30  |          EQUD 0|
000005f0  0d 02 80 1e 2e 74 65 73  74 5f 33 20 20 20 20 20  |.....test_3     |
00000600  20 20 20 20 20 20 20 20  45 51 55 44 20 30 0d 02  |        EQUD 0..|
00000610  8a 04 0d 02 94 07 5d 3a  ed 0d 02 9e 15 76 61 72  |......]:.....var|
00000620  69 61 62 6c 65 5f 73 69  7a 65 25 3d 50 25 0d 02  |iable_size%=P%..|
00000630  a8 05 e1 0d 02 b2 04 0d  02 bc 1c f4 20 61 73 73  |............ ass|
00000640  65 6d 62 6c 65 20 74 68  65 20 6d 61 69 6e 20 63  |emble the main c|
00000650  6f 64 65 0d 02 c6 04 0d  02 d0 14 dd 20 f2 61 73  |ode......... .as|
00000660  73 65 6d 62 6c 65 5f 63  6f 64 65 0d 02 da 04 0d  |semble_code.....|
00000670  02 e4 12 f4 20 64 65 66  69 6e 65 20 66 6c 61 67  |.... define flag|
00000680  73 0d 02 ee 04 0d 02 f8  10 49 66 6c 61 67 25 3d  |s........Iflag%=|
00000690  31 3c 3c 32 37 0d 03 02  10 56 66 6c 61 67 25 3d  |1<<27....Vflag%=|
000006a0  31 3c 3c 32 38 0d 03 0c  10 43 66 6c 61 67 25 3d  |1<<28....Cflag%=|
000006b0  31 3c 3c 32 39 0d 03 16  04 0d 03 20 2a f4 20 64  |1<<29...... *. d|
000006c0  65 66 69 6e 65 20 72 65  67 69 73 74 65 72 20 6e  |efine register n|
000006d0  75 6d 62 65 72 73 20 28  66 6f 72 20 6d 61 63 72  |umbers (for macr|
000006e0  6f 73 29 0d 03 2a 04 0d  03 34 3c 52 30 3d 30 3a  |os)..*...4<R0=0:|
000006f0  52 31 3d 31 3a 52 32 3d  32 3a 52 33 3d 33 3a 52  |R1=1:R2=2:R3=3:R|
00000700  34 3d 34 3a 52 35 3d 35  3a 52 36 3d 36 3a 52 37  |4=4:R5=5:R6=6:R7|
00000710  3d 37 3a 52 38 3d 38 3a  52 39 3d 39 3a 52 31 30  |=7:R8=8:R9=9:R10|
00000720  3d 31 30 0d 03 3e 2c 52  31 31 3d 31 31 3a 52 31  |=10..>,R11=11:R1|
00000730  32 3d 31 32 3a 52 31 33  3d 31 33 3a 52 31 34 3d  |2=12:R13=13:R14=|
00000740  31 34 3a 52 31 35 3d 31  35 3a 50 43 3d 31 35 0d  |14:R15=15:PC=15.|
00000750  03 48 04 0d 03 52 2a e3  20 70 61 73 73 3d 25 31  |.H...R*. pass=%1|
00000760  31 30 30 20 b8 20 25 31  31 31 30 20 88 20 32 3a  |100 . %1110 . 2:|
00000770  50 25 3d 30 3a 4f 25 3d  63 6f 64 65 25 0d 03 5c  |P%=0:O%=code%..\|
00000780  0c 5b 4f 50 54 70 61 73  73 0d 03 66 04 0d 03 70  |.[OPTpass..f...p|
00000790  12 2e 4d 6f 64 75 6c 65  5f 68 65 61 64 65 72 0d  |..Module_header.|
000007a0  03 7a 20 2e 53 74 61 72  74 5f 63 6f 64 65 20 20  |.z .Start_code  |
000007b0  20 20 20 20 20 20 20 20  20 45 51 55 44 20 30 0d  |         EQUD 0.|
000007c0  03 84 2e 2e 49 6e 69 74  69 61 6c 69 73 61 74 69  |....Initialisati|
000007d0  6f 6e 5f 63 6f 64 65 20  20 45 51 55 44 20 69 6e  |on_code  EQUD in|
000007e0  69 74 69 61 6c 69 73 65  5f 63 6f 64 65 0d 03 8e  |itialise_code...|
000007f0  2c 2e 46 69 6e 61 6c 69  73 61 74 69 6f 6e 5f 63  |,.Finalisation_c|
00000800  6f 64 65 20 20 20 20 45  51 55 44 20 66 69 6e 61  |ode    EQUD fina|
00000810  6c 69 73 65 5f 63 6f 64  65 0d 03 98 20 2e 53 65  |lise_code... .Se|
00000820  72 76 69 63 65 5f 63 61  6c 6c 5f 68 61 6e 64 6c  |rvice_call_handl|
00000830  65 72 20 45 51 55 44 20  30 0d 03 a2 2b 2e 54 69  |er EQUD 0...+.Ti|
00000840  74 6c 65 5f 73 74 72 69  6e 67 20 20 20 20 20 20  |tle_string      |
00000850  20 20 20 45 51 55 44 20  74 69 74 6c 65 5f 73 74  |   EQUD title_st|
00000860  72 69 6e 67 0d 03 ac 2a  2e 48 65 6c 70 5f 73 74  |ring...*.Help_st|
00000870  72 69 6e 67 20 20 20 20  20 20 20 20 20 20 45 51  |ring          EQ|
00000880  55 44 20 68 65 6c 70 5f  73 74 72 69 6e 67 0d 03  |UD help_string..|
00000890  b6 20 2e 43 6f 6d 6d 61  6e 64 5f 6b 65 79 77 6f  |. .Command_keywo|
000008a0  72 64 5f 74 61 62 20 20  45 51 55 44 20 30 0d 03  |rd_tab  EQUD 0..|
000008b0  c0 20 2e 53 57 49 5f 63  68 75 6e 6b 5f 6e 75 6d  |. .SWI_chunk_num|
000008c0  62 65 72 20 20 20 20 20  45 51 55 44 20 30 0d 03  |ber     EQUD 0..|
000008d0  ca 20 2e 53 57 49 5f 68  61 6e 64 6c 65 72 5f 63  |. .SWI_handler_c|
000008e0  6f 64 65 20 20 20 20 20  45 51 55 44 20 30 0d 03  |ode     EQUD 0..|
000008f0  d4 20 2e 53 57 49 5f 64  65 63 6f 64 69 6e 67 5f  |. .SWI_decoding_|
00000900  74 61 62 6c 65 20 20 20  45 51 55 44 20 30 0d 03  |table   EQUD 0..|
00000910  de 20 2e 53 57 49 5f 64  65 63 6f 64 69 6e 67 5f  |. .SWI_decoding_|
00000920  63 6f 64 65 20 20 20 20  45 51 55 44 20 30 0d 03  |code    EQUD 0..|
00000930  e8 04 0d 03 f2 44 5c 5c  5c 5c 5c 5c 5c 5c 5c 5c  |.....D\\\\\\\\\\|
00000940  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 5c 5c 5c 5c 5c 5c  |\\\\\\\\\\\\\\\\|
*
00000970  5c 5c 5c 5c 5c 5c 0d 03  fc 42 5c 20 54 49 54 4c  |\\\\\\...B\ TITL|
00000980  45 53 20 80 20 43 4f 4d  4d 41 4e 44 20 54 41 42  |ES . COMMAND TAB|
00000990  4c 45 53 20 20 20 20 20  20 20 20 20 20 20 20 20  |LES             |
000009a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000009b0  20 20 20 20 20 20 20 5c  0d 04 06 44 5c 5c 5c 5c  |       \...D\\\\|
000009c0  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 5c 5c 5c 5c 5c 5c  |\\\\\\\\\\\\\\\\|
*
000009f0  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 5c 5c 0d 04 10 04  |\\\\\\\\\\\\....|
00000a00  0d 04 1a 10 2e 68 65 6c  70 5f 73 74 72 69 6e 67  |.....help_string|
00000a10  0d 04 24 3f a4 53 28 22  5a 61 70 22 2b 6d 6f 64  |..$?.S("Zap"+mod|
00000a20  65 5f 6e 61 6d 65 24 2b  bd 39 2b 76 65 72 24 2b  |e_name$+.9+ver$+|
00000a30  22 20 28 22 2b a4 64 61  74 65 2b 22 29 20 a9 20  |" ("+.date+") . |
00000a40  22 2b 6d 6f 64 65 5f 61  75 74 68 6f 72 24 29 0d  |"+mode_author$).|
00000a50  04 2e 04 0d 04 38 11 2e  74 69 74 6c 65 5f 73 74  |.....8..title_st|
00000a60  72 69 6e 67 0d 04 42 18  a4 53 28 22 5a 61 70 22  |ring..B..S("Zap"|
00000a70  2b 6d 6f 64 65 5f 6e 61  6d 65 24 29 0d 04 4c 04  |+mode_name$)..L.|
00000a80  0d 04 56 44 5c 5c 5c 5c  5c 5c 5c 5c 5c 5c 5c 5c  |..VD\\\\\\\\\\\\|
00000a90  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 5c 5c 5c 5c 5c 5c  |\\\\\\\\\\\\\\\\|
*
00000ac0  5c 5c 5c 5c 0d 04 60 42  5c 20 49 4e 49 54 49 41  |\\\\..`B\ INITIA|
00000ad0  4c 49 53 45 20 80 20 46  49 4e 41 4c 49 53 45 20  |LISE . FINALISE |
00000ae0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
00000b00  20 20 20 20 20 5c 0d 04  6a 44 5c 5c 5c 5c 5c 5c  |     \..jD\\\\\\|
00000b10  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 5c 5c 5c 5c 5c 5c  |\\\\\\\\\\\\\\\\|
*
00000b40  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 0d 04 74 04 0d 04  |\\\\\\\\\\..t...|
00000b50  7e 14 2e 69 6e 69 74 69  61 6c 69 73 65 5f 63 6f  |~..initialise_co|
00000b60  64 65 0d 04 88 08 a4 4a  53 52 0d 04 92 0d 4d 4f  |de.....JSR....MO|
00000b70  56 20 52 30 2c 23 36 0d  04 9c 1a 4d 4f 56 20 52  |V R0,#6....MOV R|
00000b80  33 2c 23 76 61 72 69 61  62 6c 65 5f 73 69 7a 65  |3,#variable_size|
00000b90  25 0d 04 a6 3b 53 57 49  20 22 58 4f 53 5f 4d 6f  |%...;SWI "XOS_Mo|
00000ba0  64 75 6c 65 22 20 20 20  20 20 20 20 20 20 20 20  |dule"           |
00000bb0  20 20 20 5c 20 63 6c 61  69 6d 20 76 61 72 61 62  |   \ claim varab|
00000bc0  6c 65 20 77 6f 72 6b 73  70 61 63 65 0d 04 b0 0a  |le workspace....|
00000bd0  a4 52 54 53 56 53 0d 04  ba 43 4d 4f 56 20 52 31  |.RTSVS...CMOV R1|
00000be0  31 2c 52 32 20 20 20 20  20 20 20 20 20 20 20 20  |1,R2            |
00000bf0  20 20 20 20 20 20 20 20  5c 20 63 6c 61 69 6d 65  |        \ claime|
00000c00  64 20 62 6c 6f 63 6b 20  28 52 31 31 20 66 72 6f  |d block (R11 fro|
00000c10  6d 20 6e 6f 77 20 6f 6e  29 0d 04 c4 40 53 54 52  |m now on)...@STR|
00000c20  20 52 31 31 2c 5b 52 31  32 5d 20 20 20 20 20 20  | R11,[R12]      |
00000c30  20 20 20 20 20 20 20 20  20 20 20 5c 20 73 61 76  |           \ sav|
00000c40  65 20 61 73 20 6d 79 20  77 6f 72 6b 73 70 61 63  |e as my workspac|
00000c50  65 20 70 6f 69 6e 74 65  72 0d 04 ce 3d 53 54 52  |e pointer...=STR|
00000c60  20 52 31 31 2c 77 6f 72  6b 73 70 61 63 65 5f 61  | R11,workspace_a|
00000c70  64 64 72 65 73 73 20 20  20 20 20 5c 20 73 61 76  |ddress     \ sav|
00000c80  65 20 69 74 20 69 6e 20  74 68 65 20 6d 6f 64 75  |e it in the modu|
00000c90  6c 65 20 66 6f 72 0d 04  d8 37 4d 4f 56 20 52 30  |le for...7MOV R0|
00000ca0  2c 23 31 38 20 20 20 20  20 20 20 20 20 20 20 20  |,#18            |
00000cb0  20 20 20 20 20 20 20 20  5c 20 61 63 63 65 73 73  |        \ access|
00000cc0  69 6e 67 20 63 6f 6d 6d  61 6e 64 73 2e 0d 04 e2  |ing commands....|
00000cd0  14 41 44 52 20 52 31 2c  7a 61 70 5f 74 69 74 6c  |.ADR R1,zap_titl|
00000ce0  65 0d 04 ec 2c 53 57 49  20 22 58 4f 53 5f 4d 6f  |e...,SWI "XOS_Mo|
00000cf0  64 75 6c 65 22 20 20 20  20 20 20 20 20 20 20 20  |dule"           |
00000d00  20 20 20 5c 20 66 69 6e  64 20 7a 61 70 0d 04 f6  |   \ find zap...|
00000d10  2c a4 52 54 53 56 53 20  20 20 20 20 20 20 20 20  |,.RTSVS         |
00000d20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 5c 20  |              \ |
00000d30  6e 6f 74 20 66 6f 75 6e  64 0d 05 00 31 4d 4f 56  |not found...1MOV|
00000d40  20 52 31 32 2c 52 34 20  20 20 20 20 20 20 20 20  | R12,R4         |
00000d50  20 20 20 20 20 20 20 20  20 20 20 5c 20 7a 61 70  |           \ zap|
00000d60  20 77 6f 72 6b 73 70 61  63 65 0d 05 0a 17 a4 41  | workspace.....A|
00000d70  44 52 28 52 30 2c 6d 6f  64 65 5f 74 61 62 6c 65  |DR(R0,mode_table|
00000d80  29 0d 05 14 37 a4 63 61  6c 6c 28 5a 61 70 5f 41  |)...7.call(Zap_A|
00000d90  64 64 4d 6f 64 65 29 20  20 20 20 20 20 20 20 20  |ddMode)         |
00000da0  20 20 5c 20 61 64 64 20  74 68 69 73 20 6d 6f 64  |  \ add this mod|
00000db0  65 20 74 6f 20 7a 61 70  0d 05 1e 0a a4 52 54 53  |e to zap.....RTS|
00000dc0  56 53 0d 05 28 38 a4 41  44 52 28 52 30 2c 6b 65  |VS..(8.ADR(R0,ke|
00000dd0  79 5f 63 6f 6d 6d 61 6e  64 5f 74 61 62 6c 65 29  |y_command_table)|
00000de0  20 20 20 5c 20 61 64 64  20 74 61 62 6c 65 20 6f  |   \ add table o|
00000df0  66 20 63 6f 6d 6d 61 6e  64 73 0d 05 32 3c a4 63  |f commands..2<.c|
00000e00  61 6c 6c 28 5a 61 70 5f  41 64 64 43 6f 6d 6d 61  |all(Zap_AddComma|
00000e10  6e 64 73 29 20 20 20 20  20 20 20 5c 20 72 65 6d  |nds)       \ rem|
00000e20  6f 76 65 20 74 68 69 73  20 69 66 20 79 6f 75 27  |ove this if you'|
00000e30  72 65 20 6e 6f 74 0d 05  46 31 a4 52 54 53 56 53  |re not..F1.RTSVS|
00000e40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000e50  20 20 20 20 20 20 20 5c  20 75 73 69 6e 67 20 63  |       \ using c|
00000e60  6f 6d 6d 61 6e 64 73 0d  05 50 0d 4d 4f 56 20 52  |ommands..P.MOV R|
00000e70  31 2c 23 30 0d 05 5a 0e  4d 4f 56 20 52 32 2c 52  |1,#0..Z.MOV R2,R|
00000e80  31 31 0d 05 64 1a 4d 4f  56 20 52 33 2c 23 76 61  |11..d.MOV R3,#va|
00000e90  72 69 61 62 6c 65 5f 73  69 7a 65 25 0d 05 6e 3b  |riable_size%..n;|
00000ea0  a4 63 61 6c 6c 28 5a 61  70 5f 46 69 6c 6c 57 6f  |.call(Zap_FillWo|
00000eb0  72 64 73 29 20 20 20 20  20 20 20 20 20 5c 20 63  |rds)         \ c|
00000ec0  6c 65 61 72 20 77 6f 72  6b 73 70 61 63 65 20 74  |lear workspace t|
00000ed0  6f 20 7a 65 72 6f 73 0d  05 78 08 a4 52 54 53 0d  |o zeros..x..RTS.|
00000ee0  05 82 04 0d 05 8c 0e 2e  7a 61 70 5f 74 69 74 6c  |........zap_titl|
00000ef0  65 0d 05 96 0d a4 53 28  22 5a 61 70 22 29 0d 05  |e.....S("Zap")..|
00000f00  a0 04 0d 05 aa 16 2e 77  6f 72 6b 73 70 61 63 65  |.......workspace|
00000f10  5f 61 64 64 72 65 73 73  0d 05 b4 0a 45 51 55 44  |_address....EQUD|
00000f20  20 30 0d 05 be 04 0d 05  c8 1d 5c 58 20 52 31 31  | 0........\X R11|
00000f30  3d 6d 6f 64 75 6c 65 20  77 6f 72 6b 73 70 61 63  |=module workspac|
00000f40  65 20 7c 0d 05 d2 04 0d  05 dc 12 2e 67 65 74 5f  |e |.........get_|
00000f50  77 6f 72 6b 73 70 61 63  65 0d 05 e6 1d 4c 44 52  |workspace....LDR|
00000f60  20 52 31 31 2c 77 6f 72  6b 73 70 61 63 65 5f 61  | R11,workspace_a|
00000f70  64 64 72 65 73 73 0d 05  f0 0e 4d 4f 56 20 50 43  |ddress....MOV PC|
00000f80  2c 52 31 34 0d 05 fa 04  0d 06 04 12 2e 66 69 6e  |,R14.........fin|
00000f90  61 6c 69 73 65 5f 63 6f  64 65 0d 06 0e 08 a4 4a  |alise_code.....J|
00000fa0  53 52 0d 06 18 0d 4d 4f  56 20 52 30 2c 23 37 0d  |SR....MOV R0,#7.|
00000fb0  06 22 10 4c 44 52 20 52  32 2c 5b 52 31 32 5d 0d  |.".LDR R2,[R12].|
00000fc0  06 2c 32 53 57 49 20 22  58 4f 53 5f 4d 6f 64 75  |.,2SWI "XOS_Modu|
00000fd0  6c 65 22 20 20 20 20 20  20 20 20 20 20 20 20 20  |le"             |
00000fe0  20 5c 20 66 72 65 65 20  77 6f 72 6b 73 70 61 63  | \ free workspac|
00000ff0  65 0d 06 36 0a a4 52 54  53 56 53 0d 06 40 0d 4d  |e..6..RTSVS..@.M|
00001000  4f 56 20 52 30 2c 23 30  0d 06 4a 35 53 54 52 20  |OV R0,#0..J5STR |
00001010  52 30 2c 5b 52 31 32 5d  20 20 20 20 20 20 20 20  |R0,[R12]        |
00001020  20 20 20 20 20 20 20 20  20 20 5c 20 6e 75 6c 6c  |          \ null|
00001030  20 70 72 69 76 61 74 65  20 77 6f 72 64 0d 06 54  | private word..T|
00001040  08 a4 52 54 53 0d 06 5e  04 0d 06 68 44 5c 5c 5c  |..RTS..^...hD\\\|
00001050  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 5c 5c 5c 5c 5c 5c  |\\\\\\\\\\\\\\\\|
*
00001080  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 5c 5c 5c 0d 06 72  |\\\\\\\\\\\\\..r|
00001090  44 5c 20 4d 6f 64 65 20  54 61 62 6c 65 20 20 20  |D\ Mode Table   |
000010a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
000010d0  5c 0d 06 7c 44 5c 5c 5c  5c 5c 5c 5c 5c 5c 5c 5c  |\..|D\\\\\\\\\\\|
000010e0  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 5c 5c 5c 5c 5c 5c  |\\\\\\\\\\\\\\\\|
*
00001110  5c 5c 5c 5c 5c 0d 06 86  04 0d 06 90 0f 2e 6d 6f  |\\\\\.........mo|
00001120  64 65 5f 74 61 62 6c 65  0d 06 9a 38 45 51 55 44  |de_table...8EQUD|
00001130  20 6d 6f 64 65 5f 74 61  62 6c 65 20 20 20 20 20  | mode_table     |
00001140  20 20 20 20 20 20 20 20  20 20 5c 20 6f 66 66 73  |          \ offs|
00001150  65 74 20 6f 66 20 6d 6f  64 65 20 74 61 62 6c 65  |et of mode table|
00001160  0d 06 a4 35 45 51 55 44  20 6d 6f 64 65 5f 74 69  |...5EQUD mode_ti|
00001170  74 6c 65 20 20 20 20 20  20 20 20 20 20 20 20 20  |tle             |
00001180  20 20 5c 20 6d 6f 64 65  20 74 69 74 6c 65 20 73  |  \ mode title s|
00001190  74 72 69 6e 67 0d 06 ae  31 45 51 55 44 20 6d 6f  |tring...1EQUD mo|
000011a0  64 65 5f 61 75 74 68 6f  72 20 20 20 20 20 20 20  |de_author       |
000011b0  20 20 20 20 20 20 20 5c  20 61 75 74 68 6f 72 20  |       \ author |
000011c0  73 74 72 69 6e 67 0d 06  b8 34 45 51 55 44 20 6d  |string...4EQUD m|
000011d0  6f 64 65 5f 62 61 73 65  6d 6f 64 65 20 20 20 20  |ode_basemode    |
000011e0  20 20 20 20 20 20 20 20  5c 20 62 61 73 65 20 6d  |        \ base m|
000011f0  6f 64 65 20 6e 75 6d 62  65 72 0d 06 c2 37 45 51  |ode number...7EQ|
00001200  55 44 20 6d 6f 64 65 5f  6e 75 6d 62 65 72 20 20  |UD mode_number  |
00001210  20 20 20 20 20 20 20 20  20 20 20 20 5c 20 6d 6f  |            \ mo|
00001220  64 65 20 79 6f 75 20 77  61 6e 74 20 74 6f 20 62  |de you want to b|
00001230  65 0d 06 cc 41 45 51 55  44 20 6d 6f 64 65 5f 69  |e...AEQUD mode_i|
00001240  6e 69 74 20 20 20 20 20  20 20 20 20 20 20 20 20  |nit             |
00001250  20 20 20 5c 20 6f 66 66  73 65 74 20 6f 66 20 69  |   \ offset of i|
00001260  6e 69 74 69 61 6c 69 73  61 74 69 6f 6e 20 63 6f  |nitialisation co|
00001270  64 65 0d 06 d6 37 45 51  55 44 20 30 20 20 20 20  |de...7EQUD 0    |
00001280  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001290  20 20 20 20 5c 20 6f 66  66 73 65 74 20 6f 66 20  |    \ offset of |
000012a0  79 6f 75 72 20 6d 65 6e  75 0d 06 e0 34 45 51 55  |your menu...4EQU|
000012b0  44 20 6d 6f 64 65 5f 74  61 62 6c 65 5f 65 6e 64  |D mode_table_end|
000012c0  2d 6d 6f 64 65 5f 74 61  62 6c 65 20 5c 20 6c 65  |-mode_table \ le|
000012d0  6e 67 74 68 20 6f 66 20  74 61 62 6c 65 0d 06 ea  |ngth of table...|
000012e0  04 0d 06 f4 31 45 51 55  44 20 30 20 20 20 20 20  |....1EQUD 0     |
000012f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001300  20 20 20 5c 20 6d 6f 64  65 5f 70 6f 73 74 6c 6f  |   \ mode_postlo|
00001310  61 64 0d 06 fe 30 45 51  55 44 20 30 20 20 20 20  |ad...0EQUD 0    |
00001320  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001330  20 20 20 20 5c 20 6d 6f  64 65 5f 70 72 65 73 61  |    \ mode_presa|
00001340  76 65 0d 07 08 30 45 51  55 44 20 30 20 20 20 20  |ve...0EQUD 0    |
00001350  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001360  20 20 20 20 5c 20 6d 6f  64 65 5f 6c 6f 61 64 69  |    \ mode_loadi|
00001370  6e 67 0d 07 12 13 45 51  55 44 20 6d 6f 64 65 5f  |ng....EQUD mode_|
00001380  73 74 61 72 74 0d 07 1c  11 45 51 55 44 20 6d 6f  |start....EQUD mo|
00001390  64 65 5f 65 6e 64 0d 07  26 2e 45 51 55 44 20 30  |de_end..&.EQUD 0|
000013a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000013b0  20 20 20 20 20 20 20 20  5c 20 6d 6f 64 65 5f 77  |        \ mode_w|
000013c0  69 64 74 68 0d 07 30 30  45 51 55 44 20 30 20 20  |idth..00EQUD 0  |
000013d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000013e0  20 20 20 20 20 20 5c 20  6d 6f 64 65 5f 6c 69 6e  |      \ mode_lin|
000013f0  65 63 6f 6c 0d 07 3a 30  45 51 55 44 20 30 20 20  |ecol..:0EQUD 0  |
00001400  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001410  20 20 20 20 20 20 5c 20  6d 6f 64 65 5f 6c 69 6e  |      \ mode_lin|
00001420  65 6f 66 66 0d 07 44 2f  45 51 55 44 20 30 20 20  |eoff..D/EQUD 0  |
00001430  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001440  20 20 20 20 20 20 5c 20  6d 6f 64 65 5f 63 6c 6e  |      \ mode_cln|
00001450  6c 6f 67 0d 07 4e 2f 45  51 55 44 20 30 20 20 20  |log..N/EQUD 0   |
00001460  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001470  20 20 20 20 20 5c 20 6d  6f 64 65 5f 63 6c 6e 70  |     \ mode_clnp|
00001480  68 79 0d 07 58 2f 45 51  55 44 20 30 20 20 20 20  |hy..X/EQUD 0    |
00001490  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000014a0  20 20 20 20 5c 20 6d 6f  64 65 5f 63 6c 6e 6f 66  |    \ mode_clnof|
000014b0  66 0d 07 62 31 45 51 55  44 20 30 20 20 20 20 20  |f..b1EQUD 0     |
000014c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000014d0  20 20 20 5c 20 6d 6f 64  65 5f 6e 65 78 74 6c 69  |   \ mode_nextli|
000014e0  6e 65 0d 07 6c 2e 45 51  55 44 20 30 20 20 20 20  |ne..l.EQUD 0    |
000014f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001500  20 20 20 20 5c 20 6d 6f  64 65 5f 6d 69 6e 75 73  |    \ mode_minus|
00001510  0d 07 76 2d 45 51 55 44  20 30 20 20 20 20 20 20  |..v-EQUD 0      |
00001520  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001530  20 20 5c 20 6d 6f 64 65  5f 70 6c 75 73 0d 07 80  |  \ mode_plus...|
00001540  2f 45 51 55 44 20 30 20  20 20 20 20 20 20 20 20  |/EQUD 0         |
00001550  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 5c  |               \|
00001560  20 6d 6f 64 65 5f 73 6d  69 6e 75 73 0d 07 8a 2e  | mode_sminus....|
00001570  45 51 55 44 20 30 20 20  20 20 20 20 20 20 20 20  |EQUD 0          |
00001580  20 20 20 20 20 20 20 20  20 20 20 20 20 20 5c 20  |              \ |
00001590  6d 6f 64 65 5f 73 70 6c  75 73 0d 07 94 2f 45 51  |mode_splus.../EQ|
000015a0  55 44 20 30 20 20 20 20  20 20 20 20 20 20 20 20  |UD 0            |
000015b0  20 20 20 20 20 20 20 20  20 20 20 20 5c 20 6d 6f  |            \ mo|
000015c0  64 65 5f 63 6d 69 6e 75  73 0d 07 9e 2e 45 51 55  |de_cminus....EQU|
000015d0  44 20 30 20 20 20 20 20  20 20 20 20 20 20 20 20  |D 0             |
000015e0  20 20 20 20 20 20 20 20  20 20 20 5c 20 6d 6f 64  |           \ mod|
000015f0  65 5f 63 70 6c 75 73 0d  07 a8 33 45 51 55 44 20  |e_cplus...3EQUD |
00001600  30 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0               |
00001610  20 20 20 20 20 20 20 20  20 5c 20 6d 6f 64 65 5f  |         \ mode_|
00001620  72 65 64 72 61 77 6c 69  6e 65 0d 07 b2 33 45 51  |redrawline...3EQ|
00001630  55 44 20 30 20 20 20 20  20 20 20 20 20 20 20 20  |UD 0            |
00001640  20 20 20 20 20 20 20 20  20 20 20 20 5c 20 6d 6f  |            \ mo|
00001650  64 65 5f 72 65 64 72 61  77 6c 6e 75 6d 0d 07 bc  |de_redrawlnum...|
00001660  2d 45 51 55 44 20 30 20  20 20 20 20 20 20 20 20  |-EQUD 0         |
00001670  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 5c  |               \|
00001680  20 6d 6f 64 65 5f 63 68  61 72 0d 07 c6 2f 45 51  | mode_char.../EQ|
00001690  55 44 20 30 20 20 20 20  20 20 20 20 20 20 20 20  |UD 0            |
000016a0  20 20 20 20 20 20 20 20  20 20 20 20 5c 20 6d 6f  |            \ mo|
000016b0  64 65 5f 64 65 6c 65 74  65 0d 07 d0 2c 45 51 55  |de_delete...,EQU|
000016c0  44 20 30 20 20 20 20 20  20 20 20 20 20 20 20 20  |D 0             |
000016d0  20 20 20 20 20 20 20 20  20 20 20 5c 20 6d 6f 64  |           \ mod|
000016e0  65 5f 74 61 62 0d 07 da  2f 45 51 55 44 20 30 20  |e_tab.../EQUD 0 |
000016f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001700  20 20 20 20 20 20 20 5c  20 6d 6f 64 65 5f 72 65  |       \ mode_re|
00001710  74 75 72 6e 0d 07 e4 31  45 51 55 44 20 30 20 20  |turn...1EQUD 0  |
00001720  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001730  20 20 20 20 20 20 5c 20  6d 6f 64 65 5f 72 65 6e  |      \ mode_ren|
00001740  75 6d 62 65 72 0d 07 ee  33 45 51 55 44 20 30 20  |umber...3EQUD 0 |
00001750  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001760  20 20 20 20 20 20 20 5c  20 6d 6f 64 65 5f 73 61  |       \ mode_sa|
00001770  76 65 61 6e 64 72 75 6e  0d 07 f8 32 45 51 55 44  |veandrun...2EQUD|
00001780  20 30 20 20 20 20 20 20  20 20 20 20 20 20 20 20  | 0              |
00001790  20 20 20 20 20 20 20 20  20 20 5c 20 6d 6f 64 65  |          \ mode|
000017a0  5f 6c 69 6e 65 73 74 61  72 74 0d 08 02 30 45 51  |_linestart...0EQ|
000017b0  55 44 20 30 20 20 20 20  20 20 20 20 20 20 20 20  |UD 0            |
000017c0  20 20 20 20 20 20 20 20  20 20 20 20 5c 20 6d 6f  |            \ mo|
000017d0  64 65 5f 6c 69 6e 65 65  6e 64 0d 08 0c 31 45 51  |de_lineend...1EQ|
000017e0  55 44 20 30 20 20 20 20  20 20 20 20 20 20 20 20  |UD 0            |
000017f0  20 20 20 20 20 20 20 20  20 20 20 20 5c 20 6d 6f  |            \ mo|
00001800  64 65 5f 6c 69 6e 65 6e  65 78 74 0d 08 16 31 45  |de_linenext...1E|
00001810  51 55 44 20 30 20 20 20  20 20 20 20 20 20 20 20  |QUD 0           |
00001820  20 20 20 20 20 20 20 20  20 20 20 20 20 5c 20 6d  |             \ m|
00001830  6f 64 65 5f 6c 69 6e 65  70 72 65 76 0d 08 20 2d  |ode_lineprev.. -|
00001840  45 51 55 44 20 30 20 20  20 20 20 20 20 20 20 20  |EQUD 0          |
00001850  20 20 20 20 20 20 20 20  20 20 20 20 20 20 5c 20  |              \ |
00001860  6d 6f 64 65 5f 63 6f 70  79 0d 08 2a 31 45 51 55  |mode_copy..*1EQU|
00001870  44 20 30 20 20 20 20 20  20 20 20 20 20 20 20 20  |D 0             |
00001880  20 20 20 20 20 20 20 20  20 20 20 5c 20 6d 6f 64  |           \ mod|
00001890  65 5f 6a 6f 69 6e 6c 69  6e 65 0d 08 34 32 45 51  |e_joinline..42EQ|
000018a0  55 44 20 30 20 20 20 20  20 20 20 20 20 20 20 20  |UD 0            |
000018b0  20 20 20 20 20 20 20 20  20 20 20 20 5c 20 6d 6f  |            \ mo|
000018c0  64 65 5f 73 70 6c 69 74  6c 69 6e 65 0d 08 3e 33  |de_splitline..>3|
000018d0  45 51 55 44 20 30 20 20  20 20 20 20 20 20 20 20  |EQUD 0          |
000018e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 5c 20  |              \ |
000018f0  6d 6f 64 65 5f 61 6c 69  67 6e 63 61 72 65 74 0d  |mode_aligncaret.|
00001900  08 48 30 45 51 55 44 20  30 20 20 20 20 20 20 20  |.H0EQUD 0       |
00001910  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001920  20 5c 20 6d 6f 64 65 5f  63 6f 6d 6d 61 6e 64 0d  | \ mode_command.|
00001930  08 52 30 45 51 55 44 20  30 20 20 20 20 20 20 20  |.R0EQUD 0       |
00001940  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001950  20 5c 20 6d 6f 64 65 5f  63 6f 6d 70 69 6c 65 0d  | \ mode_compile.|
00001960  08 5c 33 45 51 55 44 20  30 20 20 20 20 20 20 20  |.\3EQUD 0       |
00001970  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001980  20 5c 20 6d 6f 64 65 5f  66 6f 72 6d 61 74 74 65  | \ mode_formatte|
00001990  78 74 0d 08 66 2c 45 51  55 44 20 30 20 20 20 20  |xt..f,EQUD 0    |
000019a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000019b0  20 20 20 20 5c 20 6d 6f  64 65 5f 72 75 6e 0d 08  |    \ mode_run..|
000019c0  70 33 45 51 55 44 20 30  20 20 20 20 20 20 20 20  |p3EQUD 0        |
000019d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000019e0  5c 20 6d 6f 64 65 5f 72  75 6e 61 6e 64 71 75 69  |\ mode_runandqui|
000019f0  74 0d 08 7a 2e 45 51 55  44 20 30 20 20 20 20 20  |t..z.EQUD 0     |
00001a00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001a10  20 20 20 5c 20 6d 6f 64  65 5f 62 61 73 69 63 0d  |   \ mode_basic.|
00001a20  08 84 2f 45 51 55 44 20  30 20 20 20 20 20 20 20  |../EQUD 0       |
00001a30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001a40  20 5c 20 6d 6f 64 65 5f  73 65 61 72 63 68 0d 08  | \ mode_search..|
00001a50  8e 30 45 51 55 44 20 30  20 20 20 20 20 20 20 20  |.0EQUD 0        |
00001a60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001a70  5c 20 6d 6f 64 65 5f 72  65 70 6c 61 63 65 0d 08  |\ mode_replace..|
00001a80  98 32 45 51 55 44 20 30  20 20 20 20 20 20 20 20  |.2EQUD 0        |
00001a90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001aa0  5c 20 6d 6f 64 65 5f 73  65 6c 65 63 74 69 6f 6e  |\ mode_selection|
00001ab0  0d 08 a2 2e 45 51 55 44  20 30 20 20 20 20 20 20  |....EQUD 0      |
00001ac0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001ad0  20 20 5c 20 6d 6f 64 65  5f 63 6c 69 63 6b 0d 08  |  \ mode_click..|
00001ae0  ac 30 45 51 55 44 20 30  20 20 20 20 20 20 20 20  |.0EQUD 0        |
00001af0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001b00  5c 20 6d 6f 64 65 5f 6d  65 73 73 61 67 65 0d 08  |\ mode_message..|
00001b10  b6 31 45 51 55 44 20 30  20 20 20 20 20 20 20 20  |.1EQUD 0        |
00001b20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001b30  5c 20 6d 6f 64 65 5f 73  65 74 77 69 64 74 68 0d  |\ mode_setwidth.|
00001b40  08 c0 13 2e 6d 6f 64 65  5f 74 61 62 6c 65 5f 65  |....mode_table_e|
00001b50  6e 64 0d 08 ca 04 0d 08  d4 2e 2e 6d 6f 64 65 5f  |nd.........mode_|
00001b60  74 69 74 6c 65 20 20 20  20 20 20 20 20 20 20 20  |title           |
00001b70  20 20 20 20 20 20 20 20  5c 20 6d 6f 64 65 20 74  |        \ mode t|
00001b80  69 74 6c 65 0d 08 de 12  a4 53 28 6d 6f 64 65 5f  |itle.....S(mode_|
00001b90  6e 61 6d 65 24 29 0d 08  e8 04 0d 08 f2 2f 2e 6d  |name$)......./.m|
00001ba0  6f 64 65 5f 61 75 74 68  6f 72 20 20 20 20 20 20  |ode_author      |
00001bb0  20 20 20 20 20 20 20 20  20 20 20 20 5c 20 6d 6f  |            \ mo|
00001bc0  64 65 20 61 75 74 68 6f  72 0d 08 fc 14 a4 53 28  |de author.....S(|
00001bd0  6d 6f 64 65 5f 61 75 74  68 6f 72 24 29 0d 09 06  |mode_author$)...|
00001be0  04 0d 09 10 43 2e 4e 75  6c 6c 20 20 20 20 20 20  |....C.Null      |
00001bf0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001c00  20 20 20 5c 20 6f 66 66  73 65 74 20 74 6f 20 73  |   \ offset to s|
00001c10  65 6e 64 20 65 6e 74 72  79 20 70 6f 69 6e 74 73  |end entry points|
00001c20  20 79 6f 75 0d 09 1a 3d  4d 4f 56 20 50 43 2c 52  | you...=MOV PC,R|
00001c30  31 34 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |14              |
00001c40  20 20 20 20 20 20 5c 20  64 6f 6e 27 74 20 77 61  |      \ don't wa|
00001c50  6e 74 20 74 6f 20 64 6f  20 61 6e 79 74 68 69 6e  |nt to do anythin|
00001c60  67 0d 09 24 04 0d 09 2e  0f 2e 6d 6f 64 65 5f 73  |g..$......mode_s|
00001c70  74 61 72 74 0d 09 38 08  a4 4a 53 52 0d 09 42 16  |tart..8..JSR..B.|
00001c80  42 4c 20 67 65 74 5f 6d  6f 64 65 5f 6e 75 6d 62  |BL get_mode_numb|
00001c90  65 72 0d 09 4c 1e a4 63  61 6c 6c 28 5a 61 70 5f  |er..L..call(Zap_|
00001ca0  52 65 73 74 6f 72 65 4d  6f 64 65 57 6f 72 64 29  |RestoreModeWord)|
00001cb0  0d 09 56 08 a4 52 54 53  0d 09 60 04 0d 09 6a 0d  |..V..RTS..`...j.|
00001cc0  2e 6d 6f 64 65 5f 65 6e  64 0d 09 74 08 a4 4a 53  |.mode_end..t..JS|
00001cd0  52 0d 09 7e 16 42 4c 20  67 65 74 5f 6d 6f 64 65  |R..~.BL get_mode|
00001ce0  5f 6e 75 6d 62 65 72 0d  09 88 1b a4 63 61 6c 6c  |_number.....call|
00001cf0  28 5a 61 70 5f 53 61 76  65 4d 6f 64 65 57 6f 72  |(Zap_SaveModeWor|
00001d00  64 29 0d 09 92 08 a4 52  54 53 0d 09 9c 04 0d 0d  |d).....RTS......|
00001d10  de 44 5c 5c 5c 5c 5c 5c  5c 5c 5c 5c 5c 5c 5c 5c  |.D\\\\\\\\\\\\\\|
00001d20  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 5c 5c 5c 5c 5c 5c  |\\\\\\\\\\\\\\\\|
*
00001d50  5c 5c 0d 0d e8 44 5c 20  49 6e 69 74 69 61 6c 69  |\\...D\ Initiali|
00001d60  73 65 20 62 75 66 66 65  72 73 20 20 20 20 20 20  |se buffers      |
00001d70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
00001d90  20 20 20 20 20 5c 0d 0d  f2 44 5c 5c 5c 5c 5c 5c  |     \...D\\\\\\|
00001da0  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 5c 5c 5c 5c 5c 5c  |\\\\\\\\\\\\\\\\|
*
00001dd0  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 0d 0d fc 04 0d 0e  |\\\\\\\\\\......|
00001de0  06 3a 2e 6d 6f 64 65 5f  69 6e 69 74 20 20 20 20  |.:.mode_init    |
00001df0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001e00  5c 20 69 6e 69 74 69 61  6c 69 73 65 20 65 6e 74  |\ initialise ent|
00001e10  72 79 20 70 6f 69 6e 74  0d 0e 10 0d 54 45 51 20  |ry point....TEQ |
00001e20  52 31 2c 23 31 0d 0e 1a  19 42 45 51 20 73 74 6f  |R1,#1....BEQ sto|
00001e30  72 65 5f 6d 6f 64 65 5f  6e 75 6d 62 65 72 0d 0e  |re_mode_number..|
00001e40  24 0d 54 45 51 20 52 31  2c 23 32 0d 0e 2e 14 42  |$.TEQ R1,#2....B|
00001e50  45 51 20 7a 61 70 5f 73  74 61 72 74 69 6e 67 0d  |EQ zap_starting.|
00001e60  0e 38 0e 4d 4f 56 20 50  43 2c 52 31 34 0d 0e 42  |.8.MOV PC,R14..B|
00001e70  04 0d 0e 4c 41 2e 7a 61  70 5f 73 74 61 72 74 69  |...LA.zap_starti|
00001e80  6e 67 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |ng              |
00001e90  20 20 20 5c 20 69 6e 69  74 69 61 6c 69 73 65 20  |   \ initialise |
00001ea0  74 68 65 20 6d 6f 64 65  20 77 6f 72 64 20 69 66  |the mode word if|
00001eb0  20 30 0d 0e 56 1a 53 54  4d 46 44 20 52 31 33 21  | 0..V.STMFD R13!|
00001ec0  2c 7b 52 31 2c 52 38 2c  52 31 34 7d 0d 0e 60 30  |,{R1,R8,R14}..`0|
00001ed0  4d 4f 56 20 52 38 2c 23  30 20 20 20 20 20 20 20  |MOV R8,#0       |
00001ee0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 5c 20  |              \ |
00001ef0  6f 70 74 69 6f 6e 73 20  77 6f 72 64 0d 0e 6a 16  |options word..j.|
00001f00  42 4c 20 67 65 74 5f 6d  6f 64 65 5f 6e 75 6d 62  |BL get_mode_numb|
00001f10  65 72 0d 0e 74 0d 4d 4f  56 20 52 31 2c 52 30 0d  |er..t.MOV R1,R0.|
00001f20  0e 7e 1a a4 63 61 6c 6c  28 5a 61 70 5f 47 65 74  |.~..call(Zap_Get|
00001f30  4d 6f 64 65 57 6f 72 64  29 0d 0e 88 1b 4c 44 4d  |ModeWord)....LDM|
00001f40  56 53 46 44 20 52 31 33  21 2c 7b 52 31 2c 52 38  |VSFD R13!,{R1,R8|
00001f50  2c 50 43 7d 0d 0e 92 41  54 45 51 20 52 30 2c 23  |,PC}...ATEQ R0,#|
00001f60  30 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0               |
00001f70  20 20 20 20 20 20 5c 20  68 61 76 65 20 61 6e 79  |      \ have any|
00001f80  20 6f 70 74 69 6f 6e 73  20 62 65 65 6e 20 73 65  | options been se|
00001f90  74 20 66 6f 72 0d 0e 9c  3c 4c 44 4d 4e 45 46 44  |t for...<LDMNEFD|
00001fa0  20 52 31 33 21 2c 7b 52  31 2c 52 38 2c 50 43 7d  | R13!,{R1,R8,PC}|
00001fb0  20 20 20 20 20 20 20 5c  20 74 68 69 73 20 6d 6f  |       \ this mo|
00001fc0  64 65 20 2d 20 72 65 74  75 72 6e 20 69 66 20 73  |de - return if s|
00001fd0  6f 0d 0e a6 1c 4c 44 52  20 52 30 2c 64 65 66 61  |o....LDR R0,defa|
00001fe0  75 6c 74 5f 6d 6f 64 65  5f 77 6f 72 64 0d 0e b0  |ult_mode_word...|
00001ff0  1a a4 63 61 6c 6c 28 5a  61 70 5f 50 75 74 4d 6f  |..call(Zap_PutMo|
00002000  64 65 57 6f 72 64 29 0d  0e ba 19 4c 44 4d 46 44  |deWord)....LDMFD|
00002010  20 52 31 33 21 2c 7b 52  31 2c 52 38 2c 50 43 7d  | R13!,{R1,R8,PC}|
00002020  0d 0e c4 04 0d 0e ce 16  2e 64 65 66 61 75 6c 74  |.........default|
00002030  5f 6d 6f 64 65 5f 77 6f  72 64 0d 0e d8 3c 45 51  |_mode_word...<EQ|
00002040  55 44 20 26 31 30 30 31  30 30 35 30 20 20 20 20  |UD &10010050    |
00002050  20 20 20 20 20 20 20 20  20 20 20 20 5c 20 61 75  |            \ au|
00002060  74 6f 20 69 6e 64 65 6e  74 2b 74 61 62 73 2b 38  |to indent+tabs+8|
00002070  30 20 63 6f 6c 73 0d 0e  e2 04 0d 0e ec 15 5c 45  |0 cols........\E|
00002080  20 52 30 3d 6d 6f 64 65  20 6e 75 6d 62 65 72 0d  | R0=mode number.|
00002090  0e f6 08 5c 58 20 2d 0d  0f 00 04 0d 0f 0a 16 2e  |...\X -.........|
000020a0  73 74 6f 72 65 5f 6d 6f  64 65 5f 6e 75 6d 62 65  |store_mode_numbe|
000020b0  72 0d 0f 14 1d 53 54 52  20 52 30 2c 61 63 74 75  |r....STR R0,actu|
000020c0  61 6c 5f 6d 6f 64 65 5f  6e 75 6d 62 65 72 0d 0f  |al_mode_number..|
000020d0  1e 0e 4d 4f 56 20 50 43  2c 52 31 34 0d 0f 28 04  |..MOV PC,R14..(.|
000020e0  0d 0f 32 08 5c 45 20 2d  0d 0f 3c 15 5c 58 20 52  |..2.\E -..<.\X R|
000020f0  30 3d 6d 6f 64 65 20 6e  75 6d 62 65 72 0d 0f 46  |0=mode number..F|
00002100  04 0d 0f 50 14 2e 67 65  74 5f 6d 6f 64 65 5f 6e  |...P..get_mode_n|
00002110  75 6d 62 65 72 0d 0f 5a  1d 4c 44 52 20 52 30 2c  |umber..Z.LDR R0,|
00002120  61 63 74 75 61 6c 5f 6d  6f 64 65 5f 6e 75 6d 62  |actual_mode_numb|
00002130  65 72 0d 0f 64 0e 4d 4f  56 20 50 43 2c 52 31 34  |er..d.MOV PC,R14|
00002140  0d 0f 6e 04 0d 0f 78 17  2e 61 63 74 75 61 6c 5f  |..n...x..actual_|
00002150  6d 6f 64 65 5f 6e 75 6d  62 65 72 0d 0f 82 0a 45  |mode_number....E|
00002160  51 55 44 20 30 0d 0f 8c  04 0d 0f 96 41 5c 5c 5c  |QUD 0.......A\\\|
00002170  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 5c 5c 5c 5c 5c 5c  |\\\\\\\\\\\\\\\\|
*
000021a0  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 0d 0f a0 41 5c 20  |\\\\\\\\\\...A\ |
000021b0  43 6f 6d 6d 61 6e 64 20  74 61 62 6c 65 20 20 20  |Command table   |
000021c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
000021e0  20 20 20 20 20 20 20 20  20 20 5c 0d 0f aa 41 5c  |          \...A\|
000021f0  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 5c 5c 5c 5c 5c 5c  |\\\\\\\\\\\\\\\\|
*
00002220  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 5c 5c 0d 0f b4 04  |\\\\\\\\\\\\....|
00002230  0d 0f be 16 2e 6b 65 79  5f 63 6f 6d 6d 61 6e 64  |.....key_command|
00002240  5f 74 61 62 6c 65 0d 0f  c8 1a 45 51 55 44 20 6b  |_table....EQUD k|
00002250  65 79 5f 63 6f 6d 6d 61  6e 64 5f 74 61 62 6c 65  |ey_command_table|
00002260  0d 0f d2 29 45 51 55 44  20 30 20 20 20 20 20 20  |...)EQUD 0      |
00002270  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002280  20 20 5c 20 66 6c 61 67  73 0d 0f dc 1d a4 63 6f  |  \ flags.....co|
00002290  6d 28 22 42 45 45 50 42  45 45 50 22 2c 62 65 65  |m("BEEPBEEP",bee|
000022a0  70 62 65 65 70 29 0d 0f  e6 27 45 51 55 44 20 30  |pbeep)...'EQUD 0|
000022b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000022c0  20 20 20 20 20 20 20 20  5c 20 65 6e 64 0d 0f f0  |        \ end...|
000022d0  04 0d 0f fa 0a 45 51 55  44 20 37 0d 10 04 0d 2e  |.....EQUD 7.....|
000022e0  62 65 65 70 62 65 65 70  0d 10 0e 08 a4 4a 53 52  |beepbeep.....JSR|
000022f0  0d 10 18 0c 53 57 49 20  26 31 30 37 0d 10 22 0c  |....SWI &107..".|
00002300  53 57 49 20 26 31 30 37  0d 10 2c 08 a4 52 54 53  |SWI &107..,..RTS|
00002310  0d 10 36 04 0d 10 40 40  5c 5c 5c 5c 5c 5c 5c 5c  |..6...@@\\\\\\\\|
00002320  5c 5c 20 45 6e 64 20 4f  66 20 41 73 73 65 6d 62  |\\ End Of Assemb|
00002330  6c 79 20 5c 5c 5c 5c 5c  5c 5c 5c 5c 5c 5c 5c 5c  |ly \\\\\\\\\\\\\|
00002340  5c 5c 5c 5c 5c 5c 5c 5c  5c 5c 5c 5c 5c 5c 5c 5c  |\\\\\\\\\\\\\\\\|
00002350  5c 5c 5c 5c 0d 10 4a 04  0d 10 54 05 5d 0d 10 5e  |\\\\..J...T.]..^|
00002360  04 0d 10 68 0a ed 20 70  61 73 73 0d 10 72 0e 6c  |...h.. pass..r.l|
00002370  65 6e 67 74 68 25 3d 50  25 0d 10 7c 05 e1 0d 10  |ength%=P%..|....|
00002380  86 04 0d 10 90 30 dd 20  a4 53 28 41 24 29 20 20  |.....0. .S(A$)  |
00002390  20 20 3a 5b 4f 50 54 70  61 73 73 3a 45 51 55 53  |  :[OPTpass:EQUS|
000023a0  20 41 24 2b bd 30 3a 41  4c 49 47 4e 3a 5d 3a 3d  | A$+.0:ALIGN:]:=|
000023b0  22 22 0d 10 9a 41 dd 20  a4 53 53 28 41 24 29 20  |""...A. .SS(A$) |
000023c0  20 20 3a 5b 4f 50 54 70  61 73 73 3a 53 57 49 20  |  :[OPTpass:SWI |
000023d0  22 58 4f 53 5f 57 72 69  74 65 53 22 3a 45 51 55  |"XOS_WriteS":EQU|
000023e0  53 20 41 24 2b bd 30 3a  41 4c 49 47 4e 3a 5d 3a  |S A$+.0:ALIGN:]:|
000023f0  3d 22 22 0d 10 a4 32 dd  20 a4 4a 53 52 20 20 20  |=""...2. .JSR   |
00002400  20 20 20 3a 5b 4f 50 54  70 61 73 73 3a 53 54 4d  |   :[OPTpass:STM|
00002410  46 44 20 20 20 52 31 33  21 2c 7b 52 31 34 7d 3a  |FD   R13!,{R14}:|
00002420  5d 3a 3d 22 22 0d 10 ae  45 dd 20 a4 52 54 56 20  |]:=""...E. .RTV |
00002430  20 20 20 20 20 3a 5b 4f  50 54 70 61 73 73 3a 4c  |     :[OPTpass:L|
00002440  44 4d 46 44 20 20 20 52  31 33 21 2c 7b 52 31 34  |DMFD   R13!,{R14|
00002450  7d 3a 84 52 53 20 50 43  2c 52 31 34 2c 23 56 66  |}:.RS PC,R14,#Vf|
00002460  6c 61 67 25 3a 5d 3a 3d  22 22 0d 10 b8 46 dd 20  |lag%:]:=""...F. |
00002470  a4 52 54 43 20 20 20 20  20 20 3a 5b 4f 50 54 70  |.RTC      :[OPTp|
00002480  61 73 73 3a 4c 44 4d 46  44 20 20 20 52 31 33 21  |ass:LDMFD   R13!|
00002490  2c 7b 52 31 34 7d 3a 42  49 43 53 20 50 43 2c 52  |,{R14}:BICS PC,R|
000024a0  31 34 2c 23 56 66 6c 61  67 25 3a 5d 3a 3d 22 22  |14,#Vflag%:]:=""|
000024b0  0d 10 c2 32 dd 20 a4 52  54 53 20 20 20 20 20 20  |...2. .RTS      |
000024c0  3a 5b 4f 50 54 70 61 73  73 3a 4c 44 4d 46 44 20  |:[OPTpass:LDMFD |
000024d0  20 20 52 31 33 21 2c 7b  50 43 7d 20 3a 5d 3a 3d  |  R13!,{PC} :]:=|
000024e0  22 22 0d 10 cc 31 dd 20  a4 52 54 53 4e 45 20 20  |""...1. .RTSNE  |
000024f0  20 20 3a 5b 4f 50 54 70  61 73 73 3a 4c 44 4d 4e  |  :[OPTpass:LDMN|
00002500  45 46 44 20 52 31 33 21  2c 7b 50 43 7d 3a 5d 3a  |EFD R13!,{PC}:]:|
00002510  3d 22 22 0d 10 d6 31 dd  20 a4 52 54 53 45 51 20  |=""...1. .RTSEQ |
00002520  20 20 20 3a 5b 4f 50 54  70 61 73 73 3a 4c 44 4d  |   :[OPTpass:LDM|
00002530  45 51 46 44 20 52 31 33  21 2c 7b 50 43 7d 3a 5d  |EQFD R13!,{PC}:]|
00002540  3a 3d 22 22 0d 10 e0 31  dd 20 a4 52 54 53 43 53  |:=""...1. .RTSCS|
00002550  20 20 20 20 3a 5b 4f 50  54 70 61 73 73 3a 4c 44  |    :[OPTpass:LD|
00002560  4d 43 53 46 44 20 52 31  33 21 2c 7b 50 43 7d 3a  |MCSFD R13!,{PC}:|
00002570  5d 3a 3d 22 22 0d 10 ea  31 dd 20 a4 52 54 53 43  |]:=""...1. .RTSC|
00002580  43 20 20 20 20 3a 5b 4f  50 54 70 61 73 73 3a 4c  |C    :[OPTpass:L|
00002590  44 4d 43 43 46 44 20 52  31 33 21 2c 7b 50 43 7d  |DMCCFD R13!,{PC}|
000025a0  3a 5d 3a 3d 22 22 0d 10  f4 31 dd 20 a4 52 54 53  |:]:=""...1. .RTS|
000025b0  56 53 20 20 20 20 3a 5b  4f 50 54 70 61 73 73 3a  |VS    :[OPTpass:|
000025c0  4c 44 4d 56 53 46 44 20  52 31 33 21 2c 7b 50 43  |LDMVSFD R13!,{PC|
000025d0  7d 3a 5d 3a 3d 22 22 0d  10 fe 31 dd 20 a4 52 54  |}:]:=""...1. .RT|
000025e0  53 56 43 20 20 20 20 3a  5b 4f 50 54 70 61 73 73  |SVC    :[OPTpass|
000025f0  3a 4c 44 4d 56 43 46 44  20 52 31 33 21 2c 7b 50  |:LDMVCFD R13!,{P|
00002600  43 7d 3a 5d 3a 3d 22 22  0d 11 08 31 dd 20 a4 52  |C}:]:=""...1. .R|
00002610  54 53 4c 53 20 20 20 20  3a 5b 4f 50 54 70 61 73  |TSLS    :[OPTpas|
00002620  73 3a 4c 44 4d 4c 53 46  44 20 52 31 33 21 2c 7b  |s:LDMLSFD R13!,{|
00002630  50 43 7d 3a 5d 3a 3d 22  22 0d 11 12 31 dd 20 a4  |PC}:]:=""...1. .|
00002640  52 54 53 48 49 20 20 20  20 3a 5b 4f 50 54 70 61  |RTSHI    :[OPTpa|
00002650  73 73 3a 4c 44 4d 48 49  46 44 20 52 31 33 21 2c  |ss:LDMHIFD R13!,|
00002660  7b 50 43 7d 3a 5d 3a 3d  22 22 0d 11 1c 31 dd 20  |{PC}:]:=""...1. |
00002670  a4 52 54 53 4d 49 20 20  20 20 3a 5b 4f 50 54 70  |.RTSMI    :[OPTp|
00002680  61 73 73 3a 4c 44 4d 4d  49 46 44 20 52 31 33 21  |ass:LDMMIFD R13!|
00002690  2c 7b 50 43 7d 3a 5d 3a  3d 22 22 0d 11 26 31 dd  |,{PC}:]:=""..&1.|
000026a0  20 a4 52 54 53 4c 45 20  20 20 20 3a 5b 4f 50 54  | .RTSLE    :[OPT|
000026b0  70 61 73 73 3a 4c 44 4d  4c 45 46 44 20 52 31 33  |pass:LDMLEFD R13|
000026c0  21 2c 7b 50 43 7d 3a 5d  3a 3d 22 22 0d 11 30 31  |!,{PC}:]:=""..01|
000026d0  dd 20 a4 52 54 53 47 45  20 20 20 20 3a 5b 4f 50  |. .RTSGE    :[OP|
000026e0  54 70 61 73 73 3a 4c 44  4d 47 45 46 44 20 52 31  |Tpass:LDMGEFD R1|
000026f0  33 21 2c 7b 50 43 7d 3a  5d 3a 3d 22 22 0d 11 3a  |3!,{PC}:]:=""..:|
00002700  31 dd 20 a4 52 54 53 4c  54 20 20 20 20 3a 5b 4f  |1. .RTSLT    :[O|
00002710  50 54 70 61 73 73 3a 4c  44 4d 4c 54 46 44 20 52  |PTpass:LDMLTFD R|
00002720  31 33 21 2c 7b 50 43 7d  3a 5d 3a 3d 22 22 0d 11  |13!,{PC}:]:=""..|
00002730  44 32 dd 20 a4 52 54 53  53 20 20 20 20 20 3a 5b  |D2. .RTSS     :[|
00002740  4f 50 54 70 61 73 73 3a  4c 44 4d 46 44 20 20 20  |OPTpass:LDMFD   |
00002750  52 31 33 21 2c 7b 50 43  7d 5e 3a 5d 3a 3d 22 22  |R13!,{PC}^:]:=""|
00002760  0d 11 4e 32 dd 20 a4 52  54 53 53 4e 45 20 20 20  |..N2. .RTSSNE   |
00002770  3a 5b 4f 50 54 70 61 73  73 3a 4c 44 4d 4e 45 46  |:[OPTpass:LDMNEF|
00002780  44 20 52 31 33 21 2c 7b  50 43 7d 5e 3a 5d 3a 3d  |D R13!,{PC}^:]:=|
00002790  22 22 0d 11 58 32 dd 20  a4 52 54 53 53 45 51 20  |""..X2. .RTSSEQ |
000027a0  20 20 3a 5b 4f 50 54 70  61 73 73 3a 4c 44 4d 45  |  :[OPTpass:LDME|
000027b0  51 46 44 20 52 31 33 21  2c 7b 50 43 7d 5e 3a 5d  |QFD R13!,{PC}^:]|
000027c0  3a 3d 22 22 0d 11 62 32  dd 20 a4 52 54 53 53 43  |:=""..b2. .RTSSC|
000027d0  43 20 20 20 3a 5b 4f 50  54 70 61 73 73 3a 4c 44  |C   :[OPTpass:LD|
000027e0  4d 43 43 46 44 20 52 31  33 21 2c 7b 50 43 7d 5e  |MCCFD R13!,{PC}^|
000027f0  3a 5d 3a 3d 22 22 0d 11  6c 32 dd 20 a4 52 54 53  |:]:=""..l2. .RTS|
00002800  53 43 53 20 20 20 3a 5b  4f 50 54 70 61 73 73 3a  |SCS   :[OPTpass:|
00002810  4c 44 4d 43 53 46 44 20  52 31 33 21 2c 7b 50 43  |LDMCSFD R13!,{PC|
00002820  7d 5e 3a 5d 3a 3d 22 22  0d 11 76 43 dd 20 a4 6d  |}^:]:=""..vC. .m|
00002830  65 6d 28 78 25 29 20 20  3a 77 25 3d 4f 25 2d 63  |em(x%)  :w%=O%-c|
00002840  6f 64 65 25 3a 50 25 3d  50 25 2b 78 25 3a 4f 25  |ode%:P%=P%+x%:O%|
00002850  3d 4f 25 2b 78 25 3a 5b  4f 50 54 70 61 73 73 3a  |=O%+x%:[OPTpass:|
00002860  41 4c 49 47 4e 3a 5d 3a  3d 77 25 0d 11 80 31 dd  |ALIGN:]:=w%...1.|
00002870  20 a4 6e 65 77 6c 20 20  20 20 20 3a 5b 4f 50 54  | .newl     :[OPT|
00002880  70 61 73 73 3a 53 57 49  20 22 58 4f 53 5f 4e 65  |pass:SWI "XOS_Ne|
00002890  77 4c 69 6e 65 22 3a 5d  3a 3d 22 22 0d 11 8a 04  |wLine":]:=""....|
000028a0  0d 11 94 3b dd 20 a4 64  61 74 65 20 20 20 20 20  |...;. .date     |
000028b0  20 de 20 64 61 74 65 25  20 36 34 3a 3f 64 61 74  | . date% 64:?dat|
000028c0  65 25 3d 33 3a c8 99 20  22 4f 53 5f 57 6f 72 64  |e%=3:.. "OS_Word|
000028d0  22 2c 26 30 45 2c 64 61  74 65 25 0d 11 9e 48 c8  |",&0E,date%...H.|
000028e0  99 20 22 4f 53 5f 43 6f  6e 76 65 72 74 44 61 74  |. "OS_ConvertDat|
000028f0  65 41 6e 64 54 69 6d 65  22 2c 64 61 74 65 25 2c  |eAndTime",date%,|
00002900  64 61 74 65 25 2b 31 36  2c 33 32 2c 22 25 44 59  |date%+16,32,"%DY|
00002910  20 25 4d 33 20 31 39 25  59 52 22 20 b8 20 41 25  | %M3 19%YR" . A%|
00002920  2c 42 25 0d 11 a8 0f 3f  42 25 3d 31 33 3a 3d 24  |,B%....?B%=13:=$|
00002930  41 25 0d 11 b2 04 0d 11  bc 28 f4 20 54 68 69 73  |A%.......(. This|
00002940  20 6d 6f 64 75 6c 65 73  20 77 6f 72 6b 73 70 61  | modules workspa|
00002950  63 65 20 69 73 20 61 74  20 52 31 31 21 21 0d 11  |ce is at R11!!..|
00002960  c6 04 0d 11 d0 35 dd 20  a4 4c 44 52 28 73 25 2c  |.....5. .LDR(s%,|
00002970  78 25 29 20 20 3a 5b 4f  50 54 70 61 73 73 3a 4c  |x%)  :[OPTpass:L|
00002980  44 52 20 20 20 73 25 2c  5b 52 31 31 2c 23 78 25  |DR   s%,[R11,#x%|
00002990  5d 3a 5d 3a 3d 22 22 0d  11 da 35 dd 20 a4 4c 44  |]:]:=""...5. .LD|
000029a0  52 45 51 28 73 25 2c 78  25 29 3a 5b 4f 50 54 70  |REQ(s%,x%):[OPTp|
000029b0  61 73 73 3a 4c 44 52 45  51 20 73 25 2c 5b 52 31  |ass:LDREQ s%,[R1|
000029c0  31 2c 23 78 25 5d 3a 5d  3a 3d 22 22 0d 11 e4 35  |1,#x%]:]:=""...5|
000029d0  dd 20 a4 4c 44 52 4e 45  28 73 25 2c 78 25 29 3a  |. .LDRNE(s%,x%):|
000029e0  5b 4f 50 54 70 61 73 73  3a 4c 44 52 4e 45 20 73  |[OPTpass:LDRNE s|
000029f0  25 2c 5b 52 31 31 2c 23  78 25 5d 3a 5d 3a 3d 22  |%,[R11,#x%]:]:="|
00002a00  22 0d 11 ee 35 dd 20 a4  4c 44 52 43 53 28 73 25  |"...5. .LDRCS(s%|
00002a10  2c 78 25 29 3a 5b 4f 50  54 70 61 73 73 3a 4c 44  |,x%):[OPTpass:LD|
00002a20  52 43 53 20 73 25 2c 5b  52 31 31 2c 23 78 25 5d  |RCS s%,[R11,#x%]|
00002a30  3a 5d 3a 3d 22 22 0d 11  f8 35 dd 20 a4 4c 44 52  |:]:=""...5. .LDR|
00002a40  43 43 28 73 25 2c 78 25  29 3a 5b 4f 50 54 70 61  |CC(s%,x%):[OPTpa|
00002a50  73 73 3a 4c 44 52 43 43  20 73 25 2c 5b 52 31 31  |ss:LDRCC s%,[R11|
00002a60  2c 23 78 25 5d 3a 5d 3a  3d 22 22 0d 12 02 35 dd  |,#x%]:]:=""...5.|
00002a70  20 a4 53 54 52 28 73 25  2c 78 25 29 20 20 3a 5b  | .STR(s%,x%)  :[|
00002a80  4f 50 54 70 61 73 73 3a  53 54 52 20 20 20 73 25  |OPTpass:STR   s%|
00002a90  2c 5b 52 31 31 2c 23 78  25 5d 3a 5d 3a 3d 22 22  |,[R11,#x%]:]:=""|
00002aa0  0d 12 0c 35 dd 20 a4 53  54 52 45 51 28 73 25 2c  |...5. .STREQ(s%,|
00002ab0  78 25 29 3a 5b 4f 50 54  70 61 73 73 3a 53 54 52  |x%):[OPTpass:STR|
00002ac0  45 51 20 73 25 2c 5b 52  31 31 2c 23 78 25 5d 3a  |EQ s%,[R11,#x%]:|
00002ad0  5d 3a 3d 22 22 0d 12 16  35 dd 20 a4 53 54 52 4e  |]:=""...5. .STRN|
00002ae0  45 28 73 25 2c 78 25 29  3a 5b 4f 50 54 70 61 73  |E(s%,x%):[OPTpas|
00002af0  73 3a 53 54 52 4e 45 20  73 25 2c 5b 52 31 31 2c  |s:STRNE s%,[R11,|
00002b00  23 78 25 5d 3a 5d 3a 3d  22 22 0d 12 20 35 dd 20  |#x%]:]:="".. 5. |
00002b10  a4 53 54 52 56 53 28 73  25 2c 78 25 29 3a 5b 4f  |.STRVS(s%,x%):[O|
00002b20  50 54 70 61 73 73 3a 53  54 52 56 53 20 73 25 2c  |PTpass:STRVS s%,|
00002b30  5b 52 31 31 2c 23 78 25  5d 3a 5d 3a 3d 22 22 0d  |[R11,#x%]:]:="".|
00002b40  12 2a 04 0d 12 34 1d f4  20 4d 65 6e 75 20 63 72  |.*...4.. Menu cr|
00002b50  65 61 74 69 6f 6e 20 66  75 6e 63 74 69 6f 6e 73  |eation functions|
00002b60  0d 12 3e 04 0d 12 48 19  dd 20 a4 6e 65 77 5f 6d  |..>...H.. .new_m|
00002b70  65 6e 75 28 54 24 2c 77  25 2c 63 25 29 0d 12 52  |enu(T$,w%,c%)..R|
00002b80  09 61 25 3d 50 25 0d 12  5c 0f 6d 65 6e 75 5f 6e  |.a%=P%..\.menu_n|
00002b90  75 6d 25 3d 30 0d 12 66  0c 5b 4f 50 54 70 61 73  |um%=0..f.[OPTpas|
00002ba0  73 0d 12 70 27 45 51 55  53 20 54 24 2b c4 31 32  |s..p'EQUS T$+.12|
00002bb0  2d a9 54 24 2c bd 30 29  20 20 20 20 20 20 20 20  |-.T$,.0)        |
00002bc0  20 5c 20 74 69 74 6c 65  0d 12 7a 39 45 51 55 44  | \ title..z9EQUD|
00002bd0  20 77 25 3c 3c 34 20 20  20 20 20 20 20 20 20 20  | w%<<4          |
00002be0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002bf0  20 20 20 20 5c 20 77 69  64 74 68 20 69 6e 20 6f  |    \ width in o|
00002c00  73 0d 12 84 4a 45 51 55  44 20 63 25 20 20 20 20  |s...JEQUD c%    |
00002c10  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002c20  20 20 20 20 20 20 20 20  20 20 20 20 20 5c 20 6f  |             \ o|
00002c30  66 66 73 65 74 20 6f 66  20 73 75 62 20 74 6f 20  |ffset of sub to |
00002c40  63 72 65 61 74 65 20 74  68 69 73 0d 12 8e 05 5d  |create this....]|
00002c50  0d 12 98 07 3d 61 25 0d  12 a2 04 0d 12 ac 1a dd  |....=a%.........|
00002c60  20 a4 6e 6d 65 28 54 24  2c 66 25 2c 73 25 2c 6b  | .nme(T$,f%,s%,k|
00002c70  25 2c 69 25 29 0d 12 b6  30 e7 20 73 25 3d 2d 31  |%,i%)...0. s%=-1|
00002c80  20 80 20 70 61 73 73 3d  31 34 20 8c 20 66 25 3d  | . pass=14 . f%=|
00002c90  28 66 25 20 84 20 38 29  3a 73 25 3d 6d 77 5f 77  |(f% . 8):s%=mw_w|
00002ca0  69 6e 64 6f 77 0d 12 c0  26 e7 20 69 25 3d 31 20  |indow...&. i%=1 |
00002cb0  80 20 70 61 73 73 3d 31  34 20 8c 20 69 25 3d 73  |. pass=14 . i%=s|
00002cc0  75 62 5f 6b 63 6f 6d 6d  61 6e 64 0d 12 ca 22 e7  |ub_kcommand...".|
00002cd0  20 69 25 3d 32 20 80 20  70 61 73 73 3d 31 34 20  | i%=2 . pass=14 |
00002ce0  8c 20 69 25 3d 73 75 62  5f 63 61 6c 6c 0d 12 d4  |. i%=sub_call...|
00002cf0  0c 5b 4f 50 54 70 61 73  73 0d 12 de 29 45 51 55  |.[OPTpass...)EQU|
00002d00  44 20 66 25 20 20 20 20  20 20 20 20 20 20 20 20  |D f%            |
00002d10  20 20 20 20 20 20 20 20  20 20 20 5c 20 66 6c 61  |           \ fla|
00002d20  67 73 0d 12 e8 33 45 51  55 44 20 73 25 20 20 20  |gs...3EQUD s%   |
00002d30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002d40  20 20 20 20 5c 20 73 75  62 6d 65 6e 75 20 70 6f  |    \ submenu po|
00002d50  69 6e 74 65 72 0d 12 f2  27 45 51 55 44 20 6b 25  |inter...'EQUD k%|
00002d60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002d70  20 20 20 20 20 20 20 5c  20 6b 65 79 0d 12 fc 2e  |       \ key....|
00002d80  45 51 55 44 20 69 25 20  20 20 20 20 20 20 20 20  |EQUD i%         |
00002d90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 5c 20  |              \ |
00002da0  69 6e 74 65 72 70 72 61  74 65 0d 13 06 2c a4 53  |interprate...,.S|
00002db0  28 54 24 29 20 20 20 20  20 20 20 20 20 20 20 20  |(T$)            |
00002dc0  20 20 20 20 20 20 20 20  20 20 20 5c 20 6d 65 6e  |           \ men|
00002dd0  75 20 74 65 78 74 0d 13  10 05 5d 0d 13 1a 10 6d  |u text....]....m|
00002de0  65 6e 75 5f 6e 75 6d 25  2b 3d 31 0d 13 24 10 3d  |enu_num%+=1..$.=|
00002df0  6d 65 6e 75 5f 6e 75 6d  25 2d 31 0d 13 2e 04 0d  |menu_num%-1.....|
00002e00  13 38 0f dd 20 a4 65 6e  64 5f 6d 65 6e 75 0d 13  |.8.. .end_menu..|
00002e10  42 23 e7 20 6d 65 6e 75  5f 6e 75 6d 25 3d 30 20  |B#. menu_num%=0 |
00002e20  8c 20 f1 22 4d 65 6e 75  20 4e 55 4c 4c 21 22 3a  |. ."Menu NULL!":|
00002e30  e0 0d 13 4c 0c 5b 4f 50  54 70 61 73 73 0d 13 56  |...L.[OPTpass..V|
00002e40  2e 45 51 55 44 20 2d 31  20 20 20 20 20 20 20 20  |.EQUD -1        |
00002e50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 5c  |               \|
00002e60  20 74 65 72 6d 69 6e 61  74 6f 72 0d 13 60 05 5d  | terminator..`.]|
00002e70  0d 13 6a 0e 3d 6d 65 6e  75 5f 6e 75 6d 25 0d 13  |..j.=menu_num%..|
00002e80  74 04 0d 13 7e 1a dd 20  a4 77 5f 6c 65 61 66 28  |t...~.. .w_leaf(|
00002e90  54 24 2c 77 25 2c 63 25  2c 69 25 29 0d 13 88 1a  |T$,w%,c%,i%)....|
00002ea0  62 25 3d a4 6e 65 77 5f  6d 65 6e 75 28 54 24 2c  |b%=.new_menu(T$,|
00002eb0  31 30 2c 63 25 29 0d 13  92 20 61 25 3d a4 6e 6d  |10,c%)... a%=.nm|
00002ec0  65 28 22 22 2c 34 2b 28  77 25 3c 3c 38 29 2c 30  |e("",4+(w%<<8),0|
00002ed0  2c 30 2c 69 25 29 0d 13  9c 10 61 25 3d a4 65 6e  |,0,i%)....a%=.en|
00002ee0  64 5f 6d 65 6e 75 0d 13  a6 07 3d 62 25 0d 13 b0  |d_menu....=b%...|
00002ef0  04 0d 13 ba 11 dd 20 a4  41 44 52 28 73 25 2c 78  |...... .ADR(s%,x|
00002f00  25 29 0d 13 c4 36 f4 20  54 68 65 20 69 6e 73 74  |%)...6. The inst|
00002f10  72 75 63 74 69 6f 6e 20  73 65 71 75 65 6e 63 65  |ruction sequence|
00002f20  20 6d 75 73 74 20 62 65  20 6f 66 20 46 49 58 45  | must be of FIXE|
00002f30  44 20 6c 65 6e 67 74 68  0d 13 ce 0e 61 25 3d 78  |D length....a%=x|
00002f40  25 2d 50 25 2d 38 0d 13  d8 0d e7 20 61 25 3e 3d  |%-P%-8..... a%>=|
00002f50  30 20 8c 0d 13 e2 47 20  5b 4f 50 54 70 61 73 73  |0 ....G [OPTpass|
00002f60  3a 41 44 44 20 73 25 2c  50 43 2c 23 28 61 25 20  |:ADD s%,PC,#(a% |
00002f70  80 20 26 30 30 30 30 30  33 46 46 29 3a 41 44 44  |. &000003FF):ADD|
00002f80  20 73 25 2c 73 25 2c 23  28 61 25 20 80 20 26 46  | s%,s%,#(a% . &F|
00002f90  46 46 46 46 43 30 30 29  3a 5d 0d 13 ec 05 cc 0d  |FFFFC00):]......|
00002fa0  13 f6 0b 20 61 25 3d 2d  61 25 0d 14 00 47 20 5b  |... a%=-a%...G [|
00002fb0  4f 50 54 70 61 73 73 3a  53 55 42 20 73 25 2c 50  |OPTpass:SUB s%,P|
00002fc0  43 2c 23 28 61 25 20 80  20 26 30 30 30 30 30 33  |C,#(a% . &000003|
00002fd0  46 46 29 3a 53 55 42 20  73 25 2c 73 25 2c 23 28  |FF):SUB s%,s%,#(|
00002fe0  61 25 20 80 20 26 46 46  46 46 46 43 30 30 29 3a  |a% . &FFFFFC00):|
00002ff0  5d 0d 14 0a 05 cd 0d 14  14 07 3d 22 22 0d 14 1e  |].........=""...|
00003000  04 0d 14 28 11 dd 20 a4  4d 4f 56 28 73 25 2c 78  |...(.. .MOV(s%,x|
00003010  25 29 0d 14 32 45 f4 20  70 65 72 66 6f 72 6d 20  |%)..2E. perform |
00003020  4d 4f 56 20 73 25 2c 23  78 25 20 6f 6e 20 73 65  |MOV s%,#x% on se|
00003030  63 6f 6e 64 20 70 61 73  73 20 6f 6e 6c 79 20 28  |cond pass only (|
00003040  76 61 72 69 61 62 6c 65  20 6d 61 79 20 6e 6f 74  |variable may not|
00003050  20 65 78 69 73 74 29 0d  14 3c 15 e7 20 28 70 61  | exist)..<.. (pa|
00003060  73 73 20 80 20 32 29 3c  3e 30 20 8c 0d 14 46 1a  |ss . 2)<>0 ...F.|
00003070  20 5b 4f 50 54 70 61 73  73 3a 4d 4f 56 20 73 25  | [OPTpass:MOV s%|
00003080  2c 23 78 25 3a 5d 0d 14  50 05 cc 0d 14 5a 19 20  |,#x%:]..P....Z. |
00003090  5b 4f 50 54 70 61 73 73  3a 4d 4f 56 20 73 25 2c  |[OPTpass:MOV s%,|
000030a0  23 30 3a 5d 0d 14 64 05  cd 0d 14 6e 07 3d 22 22  |#0:]..d....n.=""|
000030b0  0d 14 78 04 0d 14 82 11  dd 20 a4 54 45 51 28 73  |..x...... .TEQ(s|
000030c0  25 2c 78 25 29 0d 14 8c  45 f4 20 70 65 72 66 6f  |%,x%)...E. perfo|
000030d0  72 6d 20 54 45 51 20 73  25 2c 23 78 25 20 6f 6e  |rm TEQ s%,#x% on|
000030e0  20 73 65 63 6f 6e 64 20  70 61 73 73 20 6f 6e 6c  | second pass onl|
000030f0  79 20 28 76 61 72 69 61  62 6c 65 20 6d 61 79 20  |y (variable may |
00003100  6e 6f 74 20 65 78 69 73  74 29 0d 14 96 15 e7 20  |not exist)..... |
00003110  28 70 61 73 73 20 80 20  32 29 3c 3e 30 20 8c 0d  |(pass . 2)<>0 ..|
00003120  14 a0 1a 20 5b 4f 50 54  70 61 73 73 3a 54 45 51  |... [OPTpass:TEQ|
00003130  20 73 25 2c 23 78 25 3a  5d 0d 14 aa 05 cc 0d 14  | s%,#x%:].......|
00003140  b4 19 20 5b 4f 50 54 70  61 73 73 3a 54 45 51 20  |.. [OPTpass:TEQ |
00003150  73 25 2c 23 30 3a 5d 0d  14 be 05 cd 0d 14 c8 07  |s%,#0:].........|
00003160  3d 22 22 0d 14 d2 04 0d  14 dc 14 dd 20 a4 74 69  |=""......... .ti|
00003170  63 6b 65 71 28 73 25 2c  78 25 29 0d 14 e6 0c 5b  |ckeq(s%,x%)....[|
00003180  4f 50 54 70 61 73 73 0d  14 f0 1b 4c 44 52 20 52  |OPTpass....LDR R|
00003190  30 2c 5b 73 25 2c 23 28  32 38 2b 32 34 2a 78 25  |0,[s%,#(28+24*x%|
000031a0  29 5d 0d 14 fa 11 84 52  45 51 20 52 30 2c 52 30  |)].....REQ R0,R0|
000031b0  2c 23 31 0d 15 04 12 42  49 43 4e 45 20 52 30 2c  |,#1....BICNE R0,|
000031c0  52 30 2c 23 31 0d 15 0e  1b 53 54 52 20 52 30 2c  |R0,#1....STR R0,|
000031d0  5b 73 25 2c 23 28 32 38  2b 32 34 2a 78 25 29 5d  |[s%,#(28+24*x%)]|
000031e0  0d 15 18 09 5d 3a 3d 22  22 0d 15 22 04 0d 15 2c  |....]:="".."...,|
000031f0  14 dd 20 a4 74 69 63 6b  6e 65 28 73 25 2c 78 25  |.. .tickne(s%,x%|
00003200  29 0d 15 36 0c 5b 4f 50  54 70 61 73 73 0d 15 40  |)..6.[OPTpass..@|
00003210  1b 4c 44 52 20 52 30 2c  5b 73 25 2c 23 28 32 38  |.LDR R0,[s%,#(28|
00003220  2b 32 34 2a 78 25 29 5d  0d 15 4a 11 84 52 4e 45  |+24*x%)]..J..RNE|
00003230  20 52 30 2c 52 30 2c 23  31 0d 15 54 12 42 49 43  | R0,R0,#1..T.BIC|
00003240  45 51 20 52 30 2c 52 30  2c 23 31 0d 15 5e 1b 53  |EQ R0,R0,#1..^.S|
00003250  54 52 20 52 30 2c 5b 73  25 2c 23 28 32 38 2b 32  |TR R0,[s%,#(28+2|
00003260  34 2a 78 25 29 5d 0d 15  68 09 5d 3a 3d 22 22 0d  |4*x%)]..h.]:="".|
00003270  15 72 04 0d 15 7c 0c dd  20 f2 65 72 72 6f 72 0d  |.r...|.. .error.|
00003280  15 86 14 f6 3a f1 22 20  61 74 20 6c 69 6e 65 20  |....:." at line |
00003290  22 3b 9e 0d 15 90 05 e0  0d 15 9a 04 0d 15 a4 11  |";..............|
000032a0  dd 20 a4 65 72 72 28 61  25 2c 54 24 29 0d 15 ae  |. .err(a%,T$)...|
000032b0  41 5b 4f 50 54 70 61 73  73 3a 41 44 44 20 52 30  |A[OPTpass:ADD R0|
000032c0  2c 50 43 2c 23 30 3a 84  52 53 20 50 43 2c 52 31  |,PC,#0:.RS PC,R1|
000032d0  34 2c 23 56 66 6c 61 67  25 3a 45 51 55 44 20 61  |4,#Vflag%:EQUD a|
000032e0  25 3a a4 53 28 54 24 29  3a 5d 3a 3d 22 22 0d 15  |%:.S(T$):]:=""..|
000032f0  b8 04 0d 15 c2 11 dd 20  a4 63 6f 6d 28 54 24 2c  |....... .com(T$,|
00003300  61 25 29 0d 15 cc 1d 5b  4f 50 54 70 61 73 73 3a  |a%)....[OPTpass:|
00003310  45 51 55 53 20 54 24 3a  45 51 55 42 20 30 3a 5d  |EQUS T$:EQUB 0:]|
00003320  0d 15 d6 25 21 4f 25 3d  30 20 20 20 20 20 3a f4  |...%!O%=0     :.|
00003330  20 7a 65 72 6f 20 6e 65  78 74 20 66 6f 75 72 20  | zero next four |
00003340  62 79 74 65 73 0d 15 e0  20 5b 4f 50 54 70 61 73  |bytes... [OPTpas|
00003350  73 3a 41 4c 49 47 4e 3a  45 51 55 44 20 61 25 3a  |s:ALIGN:EQUD a%:|
00003360  5d 3a 3d 22 22 0d 15 ea  04 0d 15 f4 45 f4 20 43  |]:="".......E. C|
00003370  61 6c 6c 20 7a 61 70 20  61 74 20 65 6e 74 72 79  |all zap at entry|
00003380  20 6f 66 66 73 65 74 20  61 25 20 45 6e 74 72 79  | offset a% Entry|
00003390  20 52 30 2d 52 31 31 3d  61 72 67 73 20 52 31 32  | R0-R11=args R12|
000033a0  3d 7a 61 70 20 77 6f 72  6b 73 70 61 63 65 0d 15  |=zap workspace..|
000033b0  fe 0f dd 20 a4 63 61 6c  6c 28 61 25 29 0d 16 08  |... .call(a%)...|
000033c0  0c 5b 4f 50 54 70 61 73  73 0d 16 12 3a 4c 44 52  |.[OPTpass...:LDR|
000033d0  20 52 31 34 2c 5b 52 31  32 5d 20 20 20 20 20 20  | R14,[R12]      |
000033e0  20 20 20 20 20 20 20 20  20 20 20 5c 20 67 65 74  |           \ get|
000033f0  20 73 74 61 72 74 20 6f  66 20 7a 61 70 20 74 61  | start of zap ta|
00003400  62 6c 65 0d 16 1c 36 41  44 44 20 52 31 34 2c 52  |ble...6ADD R14,R|
00003410  31 34 2c 23 61 25 20 20  20 20 20 20 20 20 20 20  |14,#a%          |
00003420  20 20 20 20 20 5c 20 67  65 74 20 61 64 64 72 65  |     \ get addre|
00003430  73 73 20 6f 66 20 73 75  62 0d 16 26 39 53 54 4d  |ss of sub..&9STM|
00003440  46 44 20 52 31 33 21 2c  7b 52 31 34 7d 20 20 20  |FD R13!,{R14}   |
00003450  20 20 20 20 20 20 20 20  20 20 20 5c 20 73 61 76  |           \ sav|
00003460  65 20 61 64 64 72 65 73  73 20 6f 6e 20 73 74 61  |e address on sta|
00003470  63 6b 0d 16 30 3f 4d 4f  56 20 52 31 34 2c 50 43  |ck..0?MOV R14,PC|
00003480  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003490  20 20 20 20 5c 20 72 65  74 75 72 6e 20 61 64 64  |    \ return add|
000034a0  72 65 73 73 20 28 77 69  74 68 20 66 6c 61 67 73  |ress (with flags|
000034b0  29 0d 16 3a 30 4c 44 4d  46 44 20 52 31 33 21 2c  |)..:0LDMFD R13!,|
000034c0  7b 50 43 7d 20 20 20 20  20 20 20 20 20 20 20 20  |{PC}            |
000034d0  20 20 20 5c 20 63 61 6c  6c 20 74 68 65 20 73 75  |   \ call the su|
000034e0  62 0d 16 44 09 5d 3a 3d  22 22 0d 16 4e 04 0d ff  |b..D.]:=""..N...|
000034f0