====== Small Programmes ====== Blanks are significant if among the last 8 characters before a tick, see [[loaderinput|proposal for formatting and comments]] ===== Test halt on overflow ===== As it is rather unusual that the machine stops on overflow, here is a small test program: halt on overflow ;zzz0700' /zzz0700' 00 b0016' get start 01 a0017' stops if overflow u0001' loop variables: ;zzz0716' ,zzz0002' 16 7ww00000' start 17 00002000' increment go .zzz0700' ===== Hello ===== The follwing program to print ''Hello'' on the console is rather untypical: Print Hello ; 0600' / 0600' xp1600' CR xz0000' sync xp0800' UC xz0000' xp4900' H xz0000' xp0400' LC xz0000' xp3700' e xz0000' xp0600' l = 1 xz0000' xp0600' l xz0000' xp3500' o xz0000' xz0800' pause unless Br8 u0000' repeat . 0600' ===== Simple Loop ===== Example looping program that prints a given number of asterisks: simple loop ; 0900' / 0900' 00 xp0800' upper case xz0000' sync xp1600' CR xz0000' b0022' start value u0007' avoid data wait 06 b0020' get counter 07 s0021' minus step t0013' done if negative h0020' save xp1000' print * xz0000' u0006' repeat 13 xz0000' halt 14 u0000' restart data: ; 0920' ,000 03' 20 00000000' counter 21 00000010' decrement 22 00000050' initial start: . 0900' ===== Printing all digits ===== The following example prints all characters in numerical sequence, all digits as an example. It shows how to modify instructions: print 10 digits ;zzz0800' /zzz0800' 00 xp0400' lower case xz0000' xp1600' CR xz0000' 04 xp0200' print 0 xz0000' b0004' last printed e0022' mask char code a0020' increment y0004' save s0021' end? t0004' no 12 xz0400' stop for repeat b0023' y0004' start over u0000' data area: ;zzz0820' ,zzz0004' 20 00000400' increment 21 00002700' last digit 9 = x26, plus 1 22 0000ww00' mask 23 00000200' digit 0 start here: .zzz0800' ===== Fill and clear a track ===== Fills a track with its sector numbers, and then clears the same track again. To fill in physical order, use ''0q4'' in location 34; for logical order, use ''004'' If Break 4 is not set, the programme waits before clear; if Break 8 is not set, it waits after clear before repeat. fill and clear a track in physical order ;zzz0400' /zzz0400' 00 c0033' clear acc c0033' clear sector 02 b0033' get sector a0032' add track y0005' set destination 05 hzzzz' store a0034' advance e0035' mask sector h0033' save s0036' ? >0 t0012' no, done u0002' yes, repeat 12 z0400' pause unless BR4 c0033' clear track c0033' 15 b0033' a0032' y0019' c0037' discard and clear 19 hzzzz' clear mem b0033' a0034' e0035' h0033' s0036' ? >0 t0027' no, done, again u0015' yes, repeat 27 z0800' pause unless BR8 u0000' data area: ;zzz0432' ,zzz0006' 32 00002100' track to fill 33 00000000' current sector 34 000000q4' sector increment 35 000000wj' sector mask 36 00000002' to test for zero 37 00000000' trash to clear acc start here: .zzz0400'