Home » CEEFAX disks » telesoftware3.adl » 04_12_87/B\OSB07
04_12_87/B\OSB07
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 » CEEFAX disks » telesoftware3.adl |
Filename: | 04_12_87/B\OSB07 |
Read OK: | ✔ |
File size: | 16F3 bytes |
Load address: | 0800 |
Exec address: | 8023 |
File contents
10REM OSBITS Module B/osb07 20REM Proportional spacing 30REM Version 3.1 1.2.87 40 50*KEY1MODE3|M|NLIST|M 60*KEY2MO.4|MMOVE100,100|MM$="Proportional Spacing"+CHR$13+"In Mode 4"|MCALL code%,M$|M 70 80zero_page%=&8A : REM Address of zero page workspace 90block%=&600 : REM Call parameter block position 100 110DIM code% 500 120osasci=&FFE3 130oswrch=&FFEE 140osnewl=&FFE7 150osword=&FFF1 160 170FOR pass% = 0 TO 3 STEP 3 180P%=code% 190[OPT pass% 200 210\ Routine takes string passed as CALL parameter 220\ and prints it proportionally spaced at graphics cursor 230\ Will only work correctly in MODE 1 or MODE 4 240 250\ This section of code checks that the CALL 260\ Parameters are as expected 270 280LDA block% \ Look at number of passed parameters 290CMP #1 \ Is there one? 300BNE exit \ If not exit 310LDA block%+3 \ Look at passed parameter type 320CMP #129 \ Is it a string variable? 330BEQ its_a_string \ If it is then continue 340.exit 350RTS 360 370\ This section takes the start address of the string 380\ and its length from the block and eventually 390\ puts the start address in zero_page% (and +1) 400 410.its_a_string 420LDA block%+1 430STA zero_page% 440LDA block%+2 \ Take start address of string information 450STA zero_page%+1 \ from block and put into zero_page% (and +1) 460 470LDY #3 480LDA (zero_page%), Y \ String length is at third byte of info block 490STA string_length \ Store string length for reference 500LDY #0 510LDA (zero_page%), Y \ String address is at bytes 0 and 1 of info block 520PHA 530INY 540LDA (zero_page%), Y 550STA zero_page%+1 \ Now use the zero_page space to store string address 560PLA 570STA zero_page% \ zero_page% now contains start of string 580 590\ This section uses OSWORD &D to store the graphics cursor 600\ position at the start of the routine. This enables a block 610\ of text to be stacked using carriage returns (ASCII 13) 620\ The routine then selects text at graphics cursor, VDU5 630 640LDA #&D 650LDX #(os_block MOD 256) 660LDY #(os_block DIV 256) 670JSR osword 680 690LDA #5 700JSR oswrch \ Equivalent to VDU5 710 720\ The proportional spacing routine 730 740LDY #0 750.main_loop 760LDA (zero_page%), Y \ Put next character from string in Accumulator 770 780.send_character 790BMI character_out \ Don't allow any codes over 127 through 800 810CMP #13 \ Is it a Carriage Return 820BNE not_CR 830JSR osnewl \ If so go to new line 840LDA #25 \ Then move in to original X position 850JSR oswrch \ and down a little 860LDA #0 870JSR oswrch 880LDA gpos \ Old Xpos taken from OSWORD block 890JSR oswrch 900LDA gpos+1 910JSR oswrch 920LDA #&F8 \ Move down by 8 pixels to space lines a little 930JSR oswrch 940LDA #&FF 950JSR oswrch 960JMP character_out 970 980.not_CR 990CMP #32 \ Is it a control code (other than CR)? 1000BCS not_control_code 1010JMP character_out 1020 1030.not_control_code 1040.look_up_spacing 1050\A contains ascii of character to be printer out on screen 1060\Look up proportional spacing factor from table at "spacing" 1070 1080TAX \ X now contains ASCII of character to print 1090PHA \ Save ASCII onto stack 1100LDA spacing-32,X \ This is the offset into the look-up table 1110LSR A 1120LSR A 1130LSR A 1140LSR A \ Leading spaces in top 4 bits, so shift 1150 1160TAX \ Put leading spaces into X 1170BEQ no_leading_spaces 1180JSR move_left \ If there are any move to remove them 1190 1200.no_leading_spaces 1210PLA \ Pull ASCII back into A again 1220JSR oswrch \ Print the character 1230 1240TAX 1250LDA spacing-32,X \ Look up spacing info again 1260AND #&F \ Trailing spaces are in lower 4 bits 1270TAX 1280BEQ no_trailing_spaces 1290JSR move_left 1300 1310.no_trailing_spaces 1320.character_out 1330 1340INY 1350CPY string_length 1360BEQ exit2 1370JMP main_loop 1380 1390.exit2 1400LDA #4 1410JSR oswrch 1420RTS 1430 1440.move_left \ On entry X contains number of pixels to move 1450LDA #25 \ VDU 25, i.e. PLOT 1460JSR oswrch 1470LDA #0 \ PLOT 0 is a relative move 1480JSR oswrch 1490SEC 1500.left_move \ Subtract 4 for each pixel 1510SBC #4 1520DEX 1530CPX #0 1540BNE left_move 1550JSR oswrch 1560LDA #&FF 1570JSR oswrch 1580LDA #0 1590JSR oswrch 1600JSR oswrch 1610RTS 1620 1630 1640\ Proportional Space Factors Byte 1 (Leading) 2 (Trailing) 1650 1660.spacing OPT FNEQUD(&00022320) \ Space ! " # 1670 OPT FNEQUD(&12000100) \ $ % & ' 1680 OPT FNEQUD(&01011212) \ ( ) * + 1690 OPT FNEQUD(&01230113) \ , - . / 1700 OPT FNEQUD(&01010101) \ 0 1 2 3 1710 OPT FNEQUD(&01010101) \ 4 5 6 7 1720 OPT FNEQUD(&13230101) \ 8 9 colon ; 1730 OPT FNEQUD(&01110102) \ < = > ? 1740 OPT FNEQUD(&01010101) \ @ A B C 1750 OPT FNEQUD(&01010101) \ D E F G 1760 OPT FNEQUD(&01010101) \ H I J K 1770 OPT FNEQUD(&01010001) \ L M N O 1780 OPT FNEQUD(&01010101) \ P Q R S 1790 OPT FNEQUD(&00010101) \ T U V W 1800 OPT FNEQUD(&02010101) \ X Y Z [ 1810 OPT FNEQUD(&00011101) \ \ ] ^ _ 1820 OPT FNEQUD(&01010101) \ ` a b c 1830 OPT FNEQUD(&01020101) \ d e f g 1840 OPT FNEQUD(&01031201) \ h i j k 1850 OPT FNEQUD(&01010012) \ l m n o 1860 OPT FNEQUD(&01010001) \ p q r s 1870 OPT FNEQUD(&00010102) \ t u v w 1880 OPT FNEQUD(&02010101) \ x y z { 1890 OPT FNEQUD(&00001123) \ | } ~ 1900 1910.string_length BRK 1920 1930.os_block OPT FNEQUD(0) 1940.gpos OPT FNEQUD(0) 1950 1960] 1970NEXT 1980END 1990 2000DEF FNEQUD(N%) 2010LOCAL X% 2020!P%=N% 2030FOR X%=0 TO 3 2040IF (pass% AND 3) = 3 THEN PRINT ~P%?X%; 2050NEXT 2060IF (pass% AND 3) = 3 THEN PRINT 2070P%=P%+4 2080=pass%
� OSBITS Module B/osb07 � Proportional spacing � Version 3.1 1.2.87 ( 2*KEY1MODE3|M|NLIST|M <Y*KEY2MO.4|MMOVE100,100|MM$="Proportional Spacing"+CHR$13+"In Mode 4"|MCALL code%,M$|M F P5zero_page%=&8A : � Address of zero page workspace Z1block%=&600 : � Call parameter block position d n� code% 500 xosasci=&FFE3 �oswrch=&FFEE �osnewl=&FFE7 �osword=&FFF1 � �� pass% = 0 � 3 � 3 �P%=code% �[OPT pass% � �0\ Routine takes string passed as � parameter �<\ and prints it proportionally spaced at graphics cursor �,\ Will only work correctly in � 1 or � 4 � �,\ This section of code checks that the � \ Parameters are as expected =LDA block% \ Look at number of passed parameters "'CMP #1 \ Is there one? ,%BNE exit \ If not exit 67LDA block%+3 \ Look at passed parameter type @2CMP #129 \ Is it a string variable? J0BEQ its_a_string \ If it is then continue T .exit ^RTS h r8\ This section takes the start address of the string |2\ and its length from the block and eventually �3\ puts the start address in zero_page% (and +1) � �.its_a_string �LDA block%+1 �STA zero_page% �BLDA block%+2 \ Take start address of string information �ESTA zero_page%+1 \ from block and put into zero_page% (and +1) � � LDY #3 �FLDA (zero_page%), Y \ String length is at third byte of info block �;STA string_length \ Store string length for reference � LDY #0 �JLDA (zero_page%), Y \ String address is at bytes 0 and 1 of info block PHA INY LDA (zero_page%), Y &MSTA zero_page%+1 \ Now use the zero_page space to store string address 0PLA :ASTA zero_page% \ zero_page% now contains start of string D N>\ This section uses OSWORD &D to store the graphics cursor X@\ position at the start of the routine. This enables a block b;\ of text to be stacked using carriage returns (�II 13) l:\ The routine then selects text at graphics cursor, �5 v �LDA #&D �LDX #(os_block � 256) �LDY #(os_block � 256) �JSR osword � � LDA #5 �*JSR oswrch \ Equivalent to �5 � �&\ The proportional spacing routine � � LDY #0 �.main_loop �GLDA (zero_page%), Y \ Put next character from string in Accumulator .send_character ABMI character_out \ Don't allow any codes over 127 through *1CMP #13 \ Is it a Carriage Return 4BNE not_CR >.JSR osnewl \ If so go to new line H=LDA #25 \ Then move in to original X position R+JSR oswrch \ and down a little \ LDA #0 fJSR oswrch p:LDA gpos \ Old Xpos taken from OSWORD block zJSR oswrch �LDA gpos+1 �JSR oswrch �GLDA #&F8 \ Move down by 8 pixels to space lines a little �JSR oswrch �LDA #&FF �JSR oswrch �JMP character_out � �.not_CR �?CMP #32 \ Is it a control code (other than CR)? �BCS not_control_code �JMP character_out � .not_control_code .look_up_spacing >\A contains ascii of character to be printer out on screen $@\Look up proportional spacing factor from table at "spacing" . 8BTAX \ X now contains �II of character to print B-PHA \ Save �II onto stack LCLDA spacing-32,X \ This is the offset into the look-up table V LSR A ` LSR A j LSR A t@LSR A \ Leading spaces in top 4 bits, so shift ~ �3TAX \ Put leading spaces into X �BEQ no_leading_spaces �>JSR move_left \ If there are any move to remove them � �.no_leading_spaces �4PLA \ Pull �II back into A again �-JSR oswrch \ Print the character � �TAX �4LDA spacing-32,X \ Look up spacing info again �;� #&F \ Trailing spaces are in lower 4 bits �TAX BEQ no_trailing_spaces JSR move_left .no_trailing_spaces (.character_out 2 <INY FCPY string_length P BEQ exit2 ZJMP main_loop d n .exit2 x LDA #4 �JSR oswrch �RTS � �F.move_left \ On entry X contains number of pixels to move �&LDA #25 \ � 25, i.e. � �JSR oswrch �0LDA #0 \ � 0 is a relative move �JSR oswrch �SEC �3.left_move \ Subtract 4 for each pixel � SBC #4 �DEX � CPX #0 BNE left_move JSR oswrch LDA #&FF "JSR oswrch , LDA #0 6JSR oswrch @JSR oswrch JRTS T ^ hA\ Proportional Space Factors Byte 1 (Leading) 2 (Trailing) r |4.spacing OPT �EQUD(&00022320) \ Space ! " # �0 OPT �EQUD(&12000100) \ $ % & ' �0 OPT �EQUD(&01011212) \ ( ) * + �0 OPT �EQUD(&01230113) \ , - . / �0 OPT �EQUD(&01010101) \ 0 1 2 3 �0 OPT �EQUD(&01010101) \ 4 5 6 7 �4 OPT �EQUD(&13230101) \ 8 9 colon ; �0 OPT �EQUD(&01110102) \ < = > ? �0 OPT �EQUD(&01010101) \ @ A B C �0 OPT �EQUD(&01010101) \ D E F G �0 OPT �EQUD(&01010101) \ H I J K �0 OPT �EQUD(&01010001) \ L M N O �0 OPT �EQUD(&01010101) \ P Q R S �0 OPT �EQUD(&00010101) \ T U V W 0 OPT �EQUD(&02010101) \ X Y Z [ 0 OPT �EQUD(&00011101) \ \ ] ^ _ 0 OPT �EQUD(&01010101) \ ` a b c &0 OPT �EQUD(&01020101) \ d e f g 00 OPT �EQUD(&01031201) \ h i j k :0 OPT �EQUD(&01010012) \ l m n o D0 OPT �EQUD(&01010001) \ p q r s N0 OPT �EQUD(&00010102) \ t u v w X0 OPT �EQUD(&02010101) \ x y z { b. OPT �EQUD(&00001123) \ | } ~ l v.string_length BRK � �.os_block OPT �EQUD(0) �.gpos OPT �EQUD(0) � �] �� �� � �� �EQUD(N%) �� X% � !P%=N% �� X%=0 � 3 �!� (pass% � 3) = 3 � � ~P%?X%; � � (pass% � 3) = 3 � � P%=P%+4 =pass% �
00000000 0d 00 0a 1b f4 20 4f 53 42 49 54 53 20 4d 6f 64 |..... OSBITS Mod| 00000010 75 6c 65 20 42 2f 6f 73 62 30 37 0d 00 14 1a f4 |ule B/osb07.....| 00000020 20 50 72 6f 70 6f 72 74 69 6f 6e 61 6c 20 73 70 | Proportional sp| 00000030 61 63 69 6e 67 0d 00 1e 18 f4 20 56 65 72 73 69 |acing..... Versi| 00000040 6f 6e 20 33 2e 31 20 31 2e 32 2e 38 37 0d 00 28 |on 3.1 1.2.87..(| 00000050 05 20 0d 00 32 18 2a 4b 45 59 31 4d 4f 44 45 33 |. ..2.*KEY1MODE3| 00000060 7c 4d 7c 4e 4c 49 53 54 7c 4d 0d 00 3c 59 2a 4b ||M|NLIST|M..<Y*K| 00000070 45 59 32 4d 4f 2e 34 7c 4d 4d 4f 56 45 31 30 30 |EY2MO.4|MMOVE100| 00000080 2c 31 30 30 7c 4d 4d 24 3d 22 50 72 6f 70 6f 72 |,100|MM$="Propor| 00000090 74 69 6f 6e 61 6c 20 53 70 61 63 69 6e 67 22 2b |tional Spacing"+| 000000a0 43 48 52 24 31 33 2b 22 49 6e 20 4d 6f 64 65 20 |CHR$13+"In Mode | 000000b0 34 22 7c 4d 43 41 4c 4c 20 63 6f 64 65 25 2c 4d |4"|MCALL code%,M| 000000c0 24 7c 4d 0d 00 46 05 20 0d 00 50 35 7a 65 72 6f |$|M..F. ..P5zero| 000000d0 5f 70 61 67 65 25 3d 26 38 41 20 3a 20 f4 20 41 |_page%=&8A : . A| 000000e0 64 64 72 65 73 73 20 6f 66 20 7a 65 72 6f 20 70 |ddress of zero p| 000000f0 61 67 65 20 77 6f 72 6b 73 70 61 63 65 0d 00 5a |age workspace..Z| 00000100 31 62 6c 6f 63 6b 25 3d 26 36 30 30 20 3a 20 f4 |1block%=&600 : .| 00000110 20 43 61 6c 6c 20 70 61 72 61 6d 65 74 65 72 20 | Call parameter | 00000120 62 6c 6f 63 6b 20 70 6f 73 69 74 69 6f 6e 0d 00 |block position..| 00000130 64 05 20 0d 00 6e 0f de 20 63 6f 64 65 25 20 35 |d. ..n.. code% 5| 00000140 30 30 0d 00 78 10 6f 73 61 73 63 69 3d 26 46 46 |00..x.osasci=&FF| 00000150 45 33 0d 00 82 10 6f 73 77 72 63 68 3d 26 46 46 |E3....oswrch=&FF| 00000160 45 45 0d 00 8c 10 6f 73 6e 65 77 6c 3d 26 46 46 |EE....osnewl=&FF| 00000170 45 37 0d 00 96 10 6f 73 77 6f 72 64 3d 26 46 46 |E7....osword=&FF| 00000180 46 31 0d 00 a0 05 20 0d 00 aa 17 e3 20 70 61 73 |F1.... ..... pas| 00000190 73 25 20 3d 20 30 20 b8 20 33 20 88 20 33 0d 00 |s% = 0 . 3 . 3..| 000001a0 b4 0c 50 25 3d 63 6f 64 65 25 0d 00 be 0e 5b 4f |..P%=code%....[O| 000001b0 50 54 20 70 61 73 73 25 0d 00 c8 05 20 0d 00 d2 |PT pass%.... ...| 000001c0 30 5c 20 52 6f 75 74 69 6e 65 20 74 61 6b 65 73 |0\ Routine takes| 000001d0 20 73 74 72 69 6e 67 20 70 61 73 73 65 64 20 61 | string passed a| 000001e0 73 20 d6 20 70 61 72 61 6d 65 74 65 72 0d 00 dc |s . parameter...| 000001f0 3c 5c 20 61 6e 64 20 70 72 69 6e 74 73 20 69 74 |<\ and prints it| 00000200 20 70 72 6f 70 6f 72 74 69 6f 6e 61 6c 6c 79 20 | proportionally | 00000210 73 70 61 63 65 64 20 61 74 20 67 72 61 70 68 69 |spaced at graphi| 00000220 63 73 20 63 75 72 73 6f 72 0d 00 e6 2c 5c 20 57 |cs cursor...,\ W| 00000230 69 6c 6c 20 6f 6e 6c 79 20 77 6f 72 6b 20 63 6f |ill only work co| 00000240 72 72 65 63 74 6c 79 20 69 6e 20 eb 20 31 20 6f |rrectly in . 1 o| 00000250 72 20 eb 20 34 0d 00 f0 05 20 0d 00 fa 2c 5c 20 |r . 4.... ...,\ | 00000260 54 68 69 73 20 73 65 63 74 69 6f 6e 20 6f 66 20 |This section of | 00000270 63 6f 64 65 20 63 68 65 63 6b 73 20 74 68 61 74 |code checks that| 00000280 20 74 68 65 20 d6 0d 01 04 20 5c 20 50 61 72 61 | the .... \ Para| 00000290 6d 65 74 65 72 73 20 61 72 65 20 61 73 20 65 78 |meters are as ex| 000002a0 70 65 63 74 65 64 0d 01 0e 05 20 0d 01 18 3d 4c |pected.... ...=L| 000002b0 44 41 20 62 6c 6f 63 6b 25 20 20 20 20 20 20 20 |DA block% | 000002c0 20 20 20 5c 20 4c 6f 6f 6b 20 61 74 20 6e 75 6d | \ Look at num| 000002d0 62 65 72 20 6f 66 20 70 61 73 73 65 64 20 70 61 |ber of passed pa| 000002e0 72 61 6d 65 74 65 72 73 0d 01 22 27 43 4d 50 20 |rameters.."'CMP | 000002f0 23 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |#1 | 00000300 5c 20 49 73 20 74 68 65 72 65 20 6f 6e 65 3f 0d |\ Is there one?.| 00000310 01 2c 25 42 4e 45 20 65 78 69 74 20 20 20 20 20 |.,%BNE exit | 00000320 20 20 20 20 20 20 20 5c 20 49 66 20 6e 6f 74 20 | \ If not | 00000330 65 78 69 74 0d 01 36 37 4c 44 41 20 62 6c 6f 63 |exit..67LDA bloc| 00000340 6b 25 2b 33 20 20 20 20 20 20 20 20 5c 20 4c 6f |k%+3 \ Lo| 00000350 6f 6b 20 61 74 20 70 61 73 73 65 64 20 70 61 72 |ok at passed par| 00000360 61 6d 65 74 65 72 20 74 79 70 65 0d 01 40 32 43 |ameter type..@2C| 00000370 4d 50 20 23 31 32 39 20 20 20 20 20 20 20 20 20 |MP #129 | 00000380 20 20 20 5c 20 49 73 20 69 74 20 61 20 73 74 72 | \ Is it a str| 00000390 69 6e 67 20 76 61 72 69 61 62 6c 65 3f 0d 01 4a |ing variable?..J| 000003a0 30 42 45 51 20 69 74 73 5f 61 5f 73 74 72 69 6e |0BEQ its_a_strin| 000003b0 67 20 20 20 20 5c 20 49 66 20 69 74 20 69 73 20 |g \ If it is | 000003c0 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 0d 01 54 |then continue..T| 000003d0 09 2e 65 78 69 74 0d 01 5e 07 52 54 53 0d 01 68 |..exit..^.RTS..h| 000003e0 05 20 0d 01 72 38 5c 20 54 68 69 73 20 73 65 63 |. ..r8\ This sec| 000003f0 74 69 6f 6e 20 74 61 6b 65 73 20 74 68 65 20 73 |tion takes the s| 00000400 74 61 72 74 20 61 64 64 72 65 73 73 20 6f 66 20 |tart address of | 00000410 74 68 65 20 73 74 72 69 6e 67 0d 01 7c 32 5c 20 |the string..|2\ | 00000420 61 6e 64 20 69 74 73 20 6c 65 6e 67 74 68 20 66 |and its length f| 00000430 72 6f 6d 20 74 68 65 20 62 6c 6f 63 6b 20 61 6e |rom the block an| 00000440 64 20 65 76 65 6e 74 75 61 6c 6c 79 0d 01 86 33 |d eventually...3| 00000450 5c 20 70 75 74 73 20 74 68 65 20 73 74 61 72 74 |\ puts the start| 00000460 20 61 64 64 72 65 73 73 20 69 6e 20 7a 65 72 6f | address in zero| 00000470 5f 70 61 67 65 25 20 28 61 6e 64 20 2b 31 29 0d |_page% (and +1).| 00000480 01 90 05 20 0d 01 9a 11 2e 69 74 73 5f 61 5f 73 |... .....its_a_s| 00000490 74 72 69 6e 67 0d 01 a4 10 4c 44 41 20 62 6c 6f |tring....LDA blo| 000004a0 63 6b 25 2b 31 0d 01 ae 12 53 54 41 20 7a 65 72 |ck%+1....STA zer| 000004b0 6f 5f 70 61 67 65 25 0d 01 b8 42 4c 44 41 20 62 |o_page%...BLDA b| 000004c0 6c 6f 63 6b 25 2b 32 20 20 20 20 20 20 20 20 5c |lock%+2 \| 000004d0 20 54 61 6b 65 20 73 74 61 72 74 20 61 64 64 72 | Take start addr| 000004e0 65 73 73 20 6f 66 20 73 74 72 69 6e 67 20 69 6e |ess of string in| 000004f0 66 6f 72 6d 61 74 69 6f 6e 0d 01 c2 45 53 54 41 |formation...ESTA| 00000500 20 7a 65 72 6f 5f 70 61 67 65 25 2b 31 20 20 20 | zero_page%+1 | 00000510 20 5c 20 66 72 6f 6d 20 62 6c 6f 63 6b 20 61 6e | \ from block an| 00000520 64 20 70 75 74 20 69 6e 74 6f 20 7a 65 72 6f 5f |d put into zero_| 00000530 70 61 67 65 25 20 28 61 6e 64 20 2b 31 29 0d 01 |page% (and +1)..| 00000540 cc 05 20 0d 01 d6 0a 4c 44 59 20 23 33 0d 01 e0 |.. ....LDY #3...| 00000550 46 4c 44 41 20 28 7a 65 72 6f 5f 70 61 67 65 25 |FLDA (zero_page%| 00000560 29 2c 20 59 20 5c 20 53 74 72 69 6e 67 20 6c 65 |), Y \ String le| 00000570 6e 67 74 68 20 69 73 20 61 74 20 74 68 69 72 64 |ngth is at third| 00000580 20 62 79 74 65 20 6f 66 20 69 6e 66 6f 20 62 6c | byte of info bl| 00000590 6f 63 6b 0d 01 ea 3b 53 54 41 20 73 74 72 69 6e |ock...;STA strin| 000005a0 67 5f 6c 65 6e 67 74 68 20 20 20 5c 20 53 74 6f |g_length \ Sto| 000005b0 72 65 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 |re string length| 000005c0 20 66 6f 72 20 72 65 66 65 72 65 6e 63 65 0d 01 | for reference..| 000005d0 f4 0a 4c 44 59 20 23 30 0d 01 fe 4a 4c 44 41 20 |..LDY #0...JLDA | 000005e0 28 7a 65 72 6f 5f 70 61 67 65 25 29 2c 20 59 20 |(zero_page%), Y | 000005f0 5c 20 53 74 72 69 6e 67 20 61 64 64 72 65 73 73 |\ String address| 00000600 20 69 73 20 61 74 20 62 79 74 65 73 20 30 20 61 | is at bytes 0 a| 00000610 6e 64 20 31 20 6f 66 20 69 6e 66 6f 20 62 6c 6f |nd 1 of info blo| 00000620 63 6b 0d 02 08 07 50 48 41 0d 02 12 07 49 4e 59 |ck....PHA....INY| 00000630 0d 02 1c 17 4c 44 41 20 28 7a 65 72 6f 5f 70 61 |....LDA (zero_pa| 00000640 67 65 25 29 2c 20 59 0d 02 26 4d 53 54 41 20 7a |ge%), Y..&MSTA z| 00000650 65 72 6f 5f 70 61 67 65 25 2b 31 20 20 20 20 5c |ero_page%+1 \| 00000660 20 4e 6f 77 20 75 73 65 20 74 68 65 20 7a 65 72 | Now use the zer| 00000670 6f 5f 70 61 67 65 20 73 70 61 63 65 20 74 6f 20 |o_page space to | 00000680 73 74 6f 72 65 20 73 74 72 69 6e 67 20 61 64 64 |store string add| 00000690 72 65 73 73 0d 02 30 07 50 4c 41 0d 02 3a 41 53 |ress..0.PLA..:AS| 000006a0 54 41 20 7a 65 72 6f 5f 70 61 67 65 25 20 20 20 |TA zero_page% | 000006b0 20 20 20 5c 20 7a 65 72 6f 5f 70 61 67 65 25 20 | \ zero_page% | 000006c0 6e 6f 77 20 63 6f 6e 74 61 69 6e 73 20 73 74 61 |now contains sta| 000006d0 72 74 20 6f 66 20 73 74 72 69 6e 67 0d 02 44 05 |rt of string..D.| 000006e0 20 0d 02 4e 3e 5c 20 54 68 69 73 20 73 65 63 74 | ..N>\ This sect| 000006f0 69 6f 6e 20 75 73 65 73 20 4f 53 57 4f 52 44 20 |ion uses OSWORD | 00000700 26 44 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 |&D to store the | 00000710 67 72 61 70 68 69 63 73 20 63 75 72 73 6f 72 0d |graphics cursor.| 00000720 02 58 40 5c 20 70 6f 73 69 74 69 6f 6e 20 61 74 |.X@\ position at| 00000730 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 | the start of th| 00000740 65 20 72 6f 75 74 69 6e 65 2e 20 54 68 69 73 20 |e routine. This | 00000750 65 6e 61 62 6c 65 73 20 61 20 62 6c 6f 63 6b 0d |enables a block.| 00000760 02 62 3b 5c 20 6f 66 20 74 65 78 74 20 74 6f 20 |.b;\ of text to | 00000770 62 65 20 73 74 61 63 6b 65 64 20 75 73 69 6e 67 |be stacked using| 00000780 20 63 61 72 72 69 61 67 65 20 72 65 74 75 72 6e | carriage return| 00000790 73 20 28 97 49 49 20 31 33 29 0d 02 6c 3a 5c 20 |s (.II 13)..l:\ | 000007a0 54 68 65 20 72 6f 75 74 69 6e 65 20 74 68 65 6e |The routine then| 000007b0 20 73 65 6c 65 63 74 73 20 74 65 78 74 20 61 74 | selects text at| 000007c0 20 67 72 61 70 68 69 63 73 20 63 75 72 73 6f 72 | graphics cursor| 000007d0 2c 20 ef 35 0d 02 76 05 20 0d 02 80 0b 4c 44 41 |, .5..v. ....LDA| 000007e0 20 23 26 44 0d 02 8a 19 4c 44 58 20 23 28 6f 73 | #&D....LDX #(os| 000007f0 5f 62 6c 6f 63 6b 20 83 20 32 35 36 29 0d 02 94 |_block . 256)...| 00000800 19 4c 44 59 20 23 28 6f 73 5f 62 6c 6f 63 6b 20 |.LDY #(os_block | 00000810 81 20 32 35 36 29 0d 02 9e 0e 4a 53 52 20 6f 73 |. 256)....JSR os| 00000820 77 6f 72 64 0d 02 a8 05 20 0d 02 b2 0a 4c 44 41 |word.... ....LDA| 00000830 20 23 35 0d 02 bc 2a 4a 53 52 20 6f 73 77 72 63 | #5...*JSR oswrc| 00000840 68 20 20 20 20 20 20 20 20 20 20 5c 20 45 71 75 |h \ Equ| 00000850 69 76 61 6c 65 6e 74 20 74 6f 20 ef 35 0d 02 c6 |ivalent to .5...| 00000860 05 20 0d 02 d0 26 5c 20 54 68 65 20 70 72 6f 70 |. ...&\ The prop| 00000870 6f 72 74 69 6f 6e 61 6c 20 73 70 61 63 69 6e 67 |ortional spacing| 00000880 20 72 6f 75 74 69 6e 65 0d 02 da 05 20 0d 02 e4 | routine.... ...| 00000890 0a 4c 44 59 20 23 30 0d 02 ee 0e 2e 6d 61 69 6e |.LDY #0.....main| 000008a0 5f 6c 6f 6f 70 0d 02 f8 47 4c 44 41 20 28 7a 65 |_loop...GLDA (ze| 000008b0 72 6f 5f 70 61 67 65 25 29 2c 20 59 20 5c 20 50 |ro_page%), Y \ P| 000008c0 75 74 20 6e 65 78 74 20 63 68 61 72 61 63 74 65 |ut next characte| 000008d0 72 20 66 72 6f 6d 20 73 74 72 69 6e 67 20 69 6e |r from string in| 000008e0 20 41 63 63 75 6d 75 6c 61 74 6f 72 0d 03 02 05 | Accumulator....| 000008f0 20 0d 03 0c 13 2e 73 65 6e 64 5f 63 68 61 72 61 | .....send_chara| 00000900 63 74 65 72 0d 03 16 41 42 4d 49 20 63 68 61 72 |cter...ABMI char| 00000910 61 63 74 65 72 5f 6f 75 74 20 20 20 20 5c 20 44 |acter_out \ D| 00000920 6f 6e 27 74 20 61 6c 6c 6f 77 20 61 6e 79 20 63 |on't allow any c| 00000930 6f 64 65 73 20 6f 76 65 72 20 31 32 37 20 74 68 |odes over 127 th| 00000940 72 6f 75 67 68 0d 03 20 05 20 0d 03 2a 31 43 4d |rough.. . ..*1CM| 00000950 50 20 23 31 33 20 20 20 20 20 20 20 20 20 20 20 |P #13 | 00000960 20 20 5c 20 49 73 20 69 74 20 61 20 43 61 72 72 | \ Is it a Carr| 00000970 69 61 67 65 20 52 65 74 75 72 6e 0d 03 34 0e 42 |iage Return..4.B| 00000980 4e 45 20 6e 6f 74 5f 43 52 0d 03 3e 2e 4a 53 52 |NE not_CR..>.JSR| 00000990 20 6f 73 6e 65 77 6c 20 20 20 20 20 20 20 20 20 | osnewl | 000009a0 20 5c 20 49 66 20 73 6f 20 67 6f 20 74 6f 20 6e | \ If so go to n| 000009b0 65 77 20 6c 69 6e 65 0d 03 48 3d 4c 44 41 20 23 |ew line..H=LDA #| 000009c0 32 35 20 20 20 20 20 20 20 20 20 20 20 20 20 5c |25 \| 000009d0 20 54 68 65 6e 20 6d 6f 76 65 20 69 6e 20 74 6f | Then move in to| 000009e0 20 6f 72 69 67 69 6e 61 6c 20 58 20 70 6f 73 69 | original X posi| 000009f0 74 69 6f 6e 0d 03 52 2b 4a 53 52 20 6f 73 77 72 |tion..R+JSR oswr| 00000a00 63 68 20 20 20 20 20 20 20 20 20 20 5c 20 61 6e |ch \ an| 00000a10 64 20 64 6f 77 6e 20 61 20 6c 69 74 74 6c 65 0d |d down a little.| 00000a20 03 5c 0a 4c 44 41 20 23 30 0d 03 66 0e 4a 53 52 |.\.LDA #0..f.JSR| 00000a30 20 6f 73 77 72 63 68 0d 03 70 3a 4c 44 41 20 67 | oswrch..p:LDA g| 00000a40 70 6f 73 20 20 20 20 20 20 20 20 20 20 20 20 5c |pos \| 00000a50 20 4f 6c 64 20 58 70 6f 73 20 74 61 6b 65 6e 20 | Old Xpos taken | 00000a60 66 72 6f 6d 20 4f 53 57 4f 52 44 20 62 6c 6f 63 |from OSWORD bloc| 00000a70 6b 0d 03 7a 0e 4a 53 52 20 6f 73 77 72 63 68 0d |k..z.JSR oswrch.| 00000a80 03 84 0e 4c 44 41 20 67 70 6f 73 2b 31 0d 03 8e |...LDA gpos+1...| 00000a90 0e 4a 53 52 20 6f 73 77 72 63 68 0d 03 98 47 4c |.JSR oswrch...GL| 00000aa0 44 41 20 23 26 46 38 20 20 20 20 20 20 20 20 20 |DA #&F8 | 00000ab0 20 20 20 5c 20 4d 6f 76 65 20 64 6f 77 6e 20 62 | \ Move down b| 00000ac0 79 20 38 20 70 69 78 65 6c 73 20 74 6f 20 73 70 |y 8 pixels to sp| 00000ad0 61 63 65 20 6c 69 6e 65 73 20 61 20 6c 69 74 74 |ace lines a litt| 00000ae0 6c 65 0d 03 a2 0e 4a 53 52 20 6f 73 77 72 63 68 |le....JSR oswrch| 00000af0 0d 03 ac 0c 4c 44 41 20 23 26 46 46 0d 03 b6 0e |....LDA #&FF....| 00000b00 4a 53 52 20 6f 73 77 72 63 68 0d 03 c0 15 4a 4d |JSR oswrch....JM| 00000b10 50 20 63 68 61 72 61 63 74 65 72 5f 6f 75 74 0d |P character_out.| 00000b20 03 ca 05 20 0d 03 d4 0b 2e 6e 6f 74 5f 43 52 0d |... .....not_CR.| 00000b30 03 de 3f 43 4d 50 20 23 33 32 20 20 20 20 20 20 |..?CMP #32 | 00000b40 20 20 20 20 20 20 20 5c 20 49 73 20 69 74 20 61 | \ Is it a| 00000b50 20 63 6f 6e 74 72 6f 6c 20 63 6f 64 65 20 28 6f | control code (o| 00000b60 74 68 65 72 20 74 68 61 6e 20 43 52 29 3f 0d 03 |ther than CR)?..| 00000b70 e8 18 42 43 53 20 6e 6f 74 5f 63 6f 6e 74 72 6f |..BCS not_contro| 00000b80 6c 5f 63 6f 64 65 0d 03 f2 15 4a 4d 50 20 63 68 |l_code....JMP ch| 00000b90 61 72 61 63 74 65 72 5f 6f 75 74 0d 03 fc 05 20 |aracter_out.... | 00000ba0 0d 04 06 15 2e 6e 6f 74 5f 63 6f 6e 74 72 6f 6c |.....not_control| 00000bb0 5f 63 6f 64 65 0d 04 10 14 2e 6c 6f 6f 6b 5f 75 |_code.....look_u| 00000bc0 70 5f 73 70 61 63 69 6e 67 0d 04 1a 3e 5c 41 20 |p_spacing...>\A | 00000bd0 63 6f 6e 74 61 69 6e 73 20 61 73 63 69 69 20 6f |contains ascii o| 00000be0 66 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 62 |f character to b| 00000bf0 65 20 70 72 69 6e 74 65 72 20 6f 75 74 20 6f 6e |e printer out on| 00000c00 20 73 63 72 65 65 6e 0d 04 24 40 5c 4c 6f 6f 6b | screen..$@\Look| 00000c10 20 75 70 20 70 72 6f 70 6f 72 74 69 6f 6e 61 6c | up proportional| 00000c20 20 73 70 61 63 69 6e 67 20 66 61 63 74 6f 72 20 | spacing factor | 00000c30 66 72 6f 6d 20 74 61 62 6c 65 20 61 74 20 22 73 |from table at "s| 00000c40 70 61 63 69 6e 67 22 0d 04 2e 05 20 0d 04 38 42 |pacing".... ..8B| 00000c50 54 41 58 20 20 20 20 20 20 20 20 20 20 20 20 20 |TAX | 00000c60 20 20 20 20 5c 20 58 20 6e 6f 77 20 63 6f 6e 74 | \ X now cont| 00000c70 61 69 6e 73 20 97 49 49 20 6f 66 20 63 68 61 72 |ains .II of char| 00000c80 61 63 74 65 72 20 74 6f 20 70 72 69 6e 74 0d 04 |acter to print..| 00000c90 42 2d 50 48 41 20 20 20 20 20 20 20 20 20 20 20 |B-PHA | 00000ca0 20 20 20 20 20 20 5c 20 53 61 76 65 20 97 49 49 | \ Save .II| 00000cb0 20 6f 6e 74 6f 20 73 74 61 63 6b 0d 04 4c 43 4c | onto stack..LCL| 00000cc0 44 41 20 73 70 61 63 69 6e 67 2d 33 32 2c 58 20 |DA spacing-32,X | 00000cd0 20 20 20 5c 20 54 68 69 73 20 69 73 20 74 68 65 | \ This is the| 00000ce0 20 6f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 | offset into the| 00000cf0 20 6c 6f 6f 6b 2d 75 70 20 74 61 62 6c 65 0d 04 | look-up table..| 00000d00 56 09 4c 53 52 20 41 0d 04 60 09 4c 53 52 20 41 |V.LSR A..`.LSR A| 00000d10 0d 04 6a 09 4c 53 52 20 41 0d 04 74 40 4c 53 52 |..j.LSR A..t@LSR| 00000d20 20 41 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | A | 00000d30 20 5c 20 4c 65 61 64 69 6e 67 20 73 70 61 63 65 | \ Leading space| 00000d40 73 20 69 6e 20 74 6f 70 20 34 20 62 69 74 73 2c |s in top 4 bits,| 00000d50 20 73 6f 20 73 68 69 66 74 0d 04 7e 05 20 0d 04 | so shift..~. ..| 00000d60 88 33 54 41 58 20 20 20 20 20 20 20 20 20 20 20 |.3TAX | 00000d70 20 20 20 20 20 20 5c 20 50 75 74 20 6c 65 61 64 | \ Put lead| 00000d80 69 6e 67 20 73 70 61 63 65 73 20 69 6e 74 6f 20 |ing spaces into | 00000d90 58 0d 04 92 19 42 45 51 20 6e 6f 5f 6c 65 61 64 |X....BEQ no_lead| 00000da0 69 6e 67 5f 73 70 61 63 65 73 0d 04 9c 3e 4a 53 |ing_spaces...>JS| 00000db0 52 20 6d 6f 76 65 5f 6c 65 66 74 20 20 20 20 20 |R move_left | 00000dc0 20 20 5c 20 49 66 20 74 68 65 72 65 20 61 72 65 | \ If there are| 00000dd0 20 61 6e 79 20 6d 6f 76 65 20 74 6f 20 72 65 6d | any move to rem| 00000de0 6f 76 65 20 74 68 65 6d 0d 04 a6 05 20 0d 04 b0 |ove them.... ...| 00000df0 16 2e 6e 6f 5f 6c 65 61 64 69 6e 67 5f 73 70 61 |..no_leading_spa| 00000e00 63 65 73 0d 04 ba 34 50 4c 41 20 20 20 20 20 20 |ces...4PLA | 00000e10 20 20 20 20 20 20 20 20 20 20 20 5c 20 50 75 6c | \ Pul| 00000e20 6c 20 97 49 49 20 62 61 63 6b 20 69 6e 74 6f 20 |l .II back into | 00000e30 41 20 61 67 61 69 6e 0d 04 c4 2d 4a 53 52 20 6f |A again...-JSR o| 00000e40 73 77 72 63 68 20 20 20 20 20 20 20 20 20 20 5c |swrch \| 00000e50 20 50 72 69 6e 74 20 74 68 65 20 63 68 61 72 61 | Print the chara| 00000e60 63 74 65 72 0d 04 ce 05 20 0d 04 d8 07 54 41 58 |cter.... ....TAX| 00000e70 0d 04 e2 34 4c 44 41 20 73 70 61 63 69 6e 67 2d |...4LDA spacing-| 00000e80 33 32 2c 58 20 20 20 20 5c 20 4c 6f 6f 6b 20 75 |32,X \ Look u| 00000e90 70 20 73 70 61 63 69 6e 67 20 69 6e 66 6f 20 61 |p spacing info a| 00000ea0 67 61 69 6e 0d 04 ec 3b 80 20 23 26 46 20 20 20 |gain...;. #&F | 00000eb0 20 20 20 20 20 20 20 20 20 20 5c 20 54 72 61 69 | \ Trai| 00000ec0 6c 69 6e 67 20 73 70 61 63 65 73 20 61 72 65 20 |ling spaces are | 00000ed0 69 6e 20 6c 6f 77 65 72 20 34 20 62 69 74 73 0d |in lower 4 bits.| 00000ee0 04 f6 07 54 41 58 0d 05 00 1a 42 45 51 20 6e 6f |...TAX....BEQ no| 00000ef0 5f 74 72 61 69 6c 69 6e 67 5f 73 70 61 63 65 73 |_trailing_spaces| 00000f00 0d 05 0a 11 4a 53 52 20 6d 6f 76 65 5f 6c 65 66 |....JSR move_lef| 00000f10 74 0d 05 14 05 20 0d 05 1e 17 2e 6e 6f 5f 74 72 |t.... .....no_tr| 00000f20 61 69 6c 69 6e 67 5f 73 70 61 63 65 73 0d 05 28 |ailing_spaces..(| 00000f30 12 2e 63 68 61 72 61 63 74 65 72 5f 6f 75 74 0d |..character_out.| 00000f40 05 32 05 20 0d 05 3c 07 49 4e 59 0d 05 46 15 43 |.2. ..<.INY..F.C| 00000f50 50 59 20 73 74 72 69 6e 67 5f 6c 65 6e 67 74 68 |PY string_length| 00000f60 0d 05 50 0d 42 45 51 20 65 78 69 74 32 0d 05 5a |..P.BEQ exit2..Z| 00000f70 11 4a 4d 50 20 6d 61 69 6e 5f 6c 6f 6f 70 0d 05 |.JMP main_loop..| 00000f80 64 05 20 0d 05 6e 0a 2e 65 78 69 74 32 0d 05 78 |d. ..n..exit2..x| 00000f90 0a 4c 44 41 20 23 34 0d 05 82 0e 4a 53 52 20 6f |.LDA #4....JSR o| 00000fa0 73 77 72 63 68 0d 05 8c 07 52 54 53 0d 05 96 05 |swrch....RTS....| 00000fb0 20 0d 05 a0 46 2e 6d 6f 76 65 5f 6c 65 66 74 20 | ...F.move_left | 00000fc0 20 20 20 20 20 20 20 20 20 5c 20 4f 6e 20 65 6e | \ On en| 00000fd0 74 72 79 20 58 20 63 6f 6e 74 61 69 6e 73 20 6e |try X contains n| 00000fe0 75 6d 62 65 72 20 6f 66 20 70 69 78 65 6c 73 20 |umber of pixels | 00000ff0 74 6f 20 6d 6f 76 65 0d 05 aa 26 4c 44 41 20 23 |to move...&LDA #| 00001000 32 35 20 20 20 20 20 20 20 20 20 20 20 20 20 5c |25 \| 00001010 20 ef 20 32 35 2c 20 69 2e 65 2e 20 f0 0d 05 b4 | . 25, i.e. ....| 00001020 0e 4a 53 52 20 6f 73 77 72 63 68 0d 05 be 30 4c |.JSR oswrch...0L| 00001030 44 41 20 23 30 20 20 20 20 20 20 20 20 20 20 20 |DA #0 | 00001040 20 20 20 5c 20 f0 20 30 20 69 73 20 61 20 72 65 | \ . 0 is a re| 00001050 6c 61 74 69 76 65 20 6d 6f 76 65 0d 05 c8 0e 4a |lative move....J| 00001060 53 52 20 6f 73 77 72 63 68 0d 05 d2 07 53 45 43 |SR oswrch....SEC| 00001070 0d 05 dc 33 2e 6c 65 66 74 5f 6d 6f 76 65 20 20 |...3.left_move | 00001080 20 20 20 20 20 20 20 20 5c 20 53 75 62 74 72 61 | \ Subtra| 00001090 63 74 20 34 20 66 6f 72 20 65 61 63 68 20 70 69 |ct 4 for each pi| 000010a0 78 65 6c 0d 05 e6 0a 53 42 43 20 23 34 0d 05 f0 |xel....SBC #4...| 000010b0 07 44 45 58 0d 05 fa 0a 43 50 58 20 23 30 0d 06 |.DEX....CPX #0..| 000010c0 04 11 42 4e 45 20 6c 65 66 74 5f 6d 6f 76 65 0d |..BNE left_move.| 000010d0 06 0e 0e 4a 53 52 20 6f 73 77 72 63 68 0d 06 18 |...JSR oswrch...| 000010e0 0c 4c 44 41 20 23 26 46 46 0d 06 22 0e 4a 53 52 |.LDA #&FF..".JSR| 000010f0 20 6f 73 77 72 63 68 0d 06 2c 0a 4c 44 41 20 23 | oswrch..,.LDA #| 00001100 30 0d 06 36 0e 4a 53 52 20 6f 73 77 72 63 68 0d |0..6.JSR oswrch.| 00001110 06 40 0e 4a 53 52 20 6f 73 77 72 63 68 0d 06 4a |.@.JSR oswrch..J| 00001120 07 52 54 53 0d 06 54 05 20 0d 06 5e 05 20 0d 06 |.RTS..T. ..^. ..| 00001130 68 41 5c 20 20 20 50 72 6f 70 6f 72 74 69 6f 6e |hA\ Proportion| 00001140 61 6c 20 53 70 61 63 65 20 46 61 63 74 6f 72 73 |al Space Factors| 00001150 20 20 42 79 74 65 20 31 20 28 4c 65 61 64 69 6e | Byte 1 (Leadin| 00001160 67 29 20 32 20 28 54 72 61 69 6c 69 6e 67 29 0d |g) 2 (Trailing).| 00001170 06 72 05 20 0d 06 7c 34 2e 73 70 61 63 69 6e 67 |.r. ..|4.spacing| 00001180 20 20 20 20 20 4f 50 54 20 a4 45 51 55 44 28 26 | OPT .EQUD(&| 00001190 30 30 30 32 32 33 32 30 29 20 20 5c 20 53 70 61 |00022320) \ Spa| 000011a0 63 65 20 21 20 22 20 23 0d 06 86 30 20 20 20 20 |ce ! " #...0 | 000011b0 20 20 20 20 20 20 20 20 20 4f 50 54 20 a4 45 51 | OPT .EQ| 000011c0 55 44 28 26 31 32 30 30 30 31 30 30 29 20 20 5c |UD(&12000100) \| 000011d0 20 24 20 25 20 26 20 27 0d 06 90 30 20 20 20 20 | $ % & '...0 | 000011e0 20 20 20 20 20 20 20 20 20 4f 50 54 20 a4 45 51 | OPT .EQ| 000011f0 55 44 28 26 30 31 30 31 31 32 31 32 29 20 20 5c |UD(&01011212) \| 00001200 20 28 20 29 20 2a 20 2b 0d 06 9a 30 20 20 20 20 | ( ) * +...0 | 00001210 20 20 20 20 20 20 20 20 20 4f 50 54 20 a4 45 51 | OPT .EQ| 00001220 55 44 28 26 30 31 32 33 30 31 31 33 29 20 20 5c |UD(&01230113) \| 00001230 20 2c 20 2d 20 2e 20 2f 0d 06 a4 30 20 20 20 20 | , - . /...0 | 00001240 20 20 20 20 20 20 20 20 20 4f 50 54 20 a4 45 51 | OPT .EQ| 00001250 55 44 28 26 30 31 30 31 30 31 30 31 29 20 20 5c |UD(&01010101) \| 00001260 20 30 20 31 20 32 20 33 0d 06 ae 30 20 20 20 20 | 0 1 2 3...0 | 00001270 20 20 20 20 20 20 20 20 20 4f 50 54 20 a4 45 51 | OPT .EQ| 00001280 55 44 28 26 30 31 30 31 30 31 30 31 29 20 20 5c |UD(&01010101) \| 00001290 20 34 20 35 20 36 20 37 0d 06 b8 34 20 20 20 20 | 4 5 6 7...4 | 000012a0 20 20 20 20 20 20 20 20 20 4f 50 54 20 a4 45 51 | OPT .EQ| 000012b0 55 44 28 26 31 33 32 33 30 31 30 31 29 20 20 5c |UD(&13230101) \| 000012c0 20 38 20 39 20 63 6f 6c 6f 6e 20 3b 0d 06 c2 30 | 8 9 colon ;...0| 000012d0 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 000012e0 20 a4 45 51 55 44 28 26 30 31 31 31 30 31 30 32 | .EQUD(&01110102| 000012f0 29 20 20 5c 20 3c 20 3d 20 3e 20 3f 0d 06 cc 30 |) \ < = > ?...0| 00001300 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 00001310 20 a4 45 51 55 44 28 26 30 31 30 31 30 31 30 31 | .EQUD(&01010101| 00001320 29 20 20 5c 20 40 20 41 20 42 20 43 0d 06 d6 30 |) \ @ A B C...0| 00001330 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 00001340 20 a4 45 51 55 44 28 26 30 31 30 31 30 31 30 31 | .EQUD(&01010101| 00001350 29 20 20 5c 20 44 20 45 20 46 20 47 0d 06 e0 30 |) \ D E F G...0| 00001360 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 00001370 20 a4 45 51 55 44 28 26 30 31 30 31 30 31 30 31 | .EQUD(&01010101| 00001380 29 20 20 5c 20 48 20 49 20 4a 20 4b 0d 06 ea 30 |) \ H I J K...0| 00001390 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 000013a0 20 a4 45 51 55 44 28 26 30 31 30 31 30 30 30 31 | .EQUD(&01010001| 000013b0 29 20 20 5c 20 4c 20 4d 20 4e 20 4f 0d 06 f4 30 |) \ L M N O...0| 000013c0 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 000013d0 20 a4 45 51 55 44 28 26 30 31 30 31 30 31 30 31 | .EQUD(&01010101| 000013e0 29 20 20 5c 20 50 20 51 20 52 20 53 0d 06 fe 30 |) \ P Q R S...0| 000013f0 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 00001400 20 a4 45 51 55 44 28 26 30 30 30 31 30 31 30 31 | .EQUD(&00010101| 00001410 29 20 20 5c 20 54 20 55 20 56 20 57 0d 07 08 30 |) \ T U V W...0| 00001420 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 00001430 20 a4 45 51 55 44 28 26 30 32 30 31 30 31 30 31 | .EQUD(&02010101| 00001440 29 20 20 5c 20 58 20 59 20 5a 20 5b 0d 07 12 30 |) \ X Y Z [...0| 00001450 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 00001460 20 a4 45 51 55 44 28 26 30 30 30 31 31 31 30 31 | .EQUD(&00011101| 00001470 29 20 20 5c 20 5c 20 5d 20 5e 20 5f 0d 07 1c 30 |) \ \ ] ^ _...0| 00001480 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 00001490 20 a4 45 51 55 44 28 26 30 31 30 31 30 31 30 31 | .EQUD(&01010101| 000014a0 29 20 20 5c 20 60 20 61 20 62 20 63 0d 07 26 30 |) \ ` a b c..&0| 000014b0 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 000014c0 20 a4 45 51 55 44 28 26 30 31 30 32 30 31 30 31 | .EQUD(&01020101| 000014d0 29 20 20 5c 20 64 20 65 20 66 20 67 0d 07 30 30 |) \ d e f g..00| 000014e0 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 000014f0 20 a4 45 51 55 44 28 26 30 31 30 33 31 32 30 31 | .EQUD(&01031201| 00001500 29 20 20 5c 20 68 20 69 20 6a 20 6b 0d 07 3a 30 |) \ h i j k..:0| 00001510 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 00001520 20 a4 45 51 55 44 28 26 30 31 30 31 30 30 31 32 | .EQUD(&01010012| 00001530 29 20 20 5c 20 6c 20 6d 20 6e 20 6f 0d 07 44 30 |) \ l m n o..D0| 00001540 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 00001550 20 a4 45 51 55 44 28 26 30 31 30 31 30 30 30 31 | .EQUD(&01010001| 00001560 29 20 20 5c 20 70 20 71 20 72 20 73 0d 07 4e 30 |) \ p q r s..N0| 00001570 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 00001580 20 a4 45 51 55 44 28 26 30 30 30 31 30 31 30 32 | .EQUD(&00010102| 00001590 29 20 20 5c 20 74 20 75 20 76 20 77 0d 07 58 30 |) \ t u v w..X0| 000015a0 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 000015b0 20 a4 45 51 55 44 28 26 30 32 30 31 30 31 30 31 | .EQUD(&02010101| 000015c0 29 20 20 5c 20 78 20 79 20 7a 20 7b 0d 07 62 2e |) \ x y z {..b.| 000015d0 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 50 54 | OPT| 000015e0 20 a4 45 51 55 44 28 26 30 30 30 30 31 31 32 33 | .EQUD(&00001123| 000015f0 29 20 20 5c 20 7c 20 7d 20 7e 0d 07 6c 05 20 0d |) \ | } ~..l. .| 00001600 07 76 17 2e 73 74 72 69 6e 67 5f 6c 65 6e 67 74 |.v..string_lengt| 00001610 68 20 20 42 52 4b 0d 07 80 05 20 0d 07 8a 1d 2e |h BRK.... .....| 00001620 6f 73 5f 62 6c 6f 63 6b 20 20 20 20 4f 50 54 20 |os_block OPT | 00001630 a4 45 51 55 44 28 30 29 0d 07 94 1d 2e 67 70 6f |.EQUD(0).....gpo| 00001640 73 20 20 20 20 20 20 20 20 4f 50 54 20 a4 45 51 |s OPT .EQ| 00001650 55 44 28 30 29 0d 07 9e 05 20 0d 07 a8 05 5d 0d |UD(0).... ....].| 00001660 07 b2 05 ed 0d 07 bc 05 e0 0d 07 c6 05 20 0d 07 |............. ..| 00001670 d0 0f dd 20 a4 45 51 55 44 28 4e 25 29 0d 07 da |... .EQUD(N%)...| 00001680 08 ea 20 58 25 0d 07 e4 0a 21 50 25 3d 4e 25 0d |.. X%....!P%=N%.| 00001690 07 ee 0e e3 20 58 25 3d 30 20 b8 20 33 0d 07 f8 |.... X%=0 . 3...| 000016a0 21 e7 20 28 70 61 73 73 25 20 80 20 33 29 20 3d |!. (pass% . 3) =| 000016b0 20 33 20 8c 20 f1 20 7e 50 25 3f 58 25 3b 0d 08 | 3 . . ~P%?X%;..| 000016c0 02 05 ed 0d 08 0c 19 e7 20 28 70 61 73 73 25 20 |........ (pass% | 000016d0 80 20 33 29 20 3d 20 33 20 8c 20 f1 0d 08 16 0b |. 3) = 3 . .....| 000016e0 50 25 3d 50 25 2b 34 0d 08 20 0a 3d 70 61 73 73 |P%=P%+4.. .=pass| 000016f0 25 0d ff |%..| 000016f3