Home » CEEFAX disks » telesoftware4.adl » 15-01-88/ABSOL

15-01-88/ABSOL

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 » telesoftware4.adl
Filename: 15-01-88/ABSOL
Read OK:
File size: 06D8 bytes
Load address: FFFF1900
Exec address: FFFF8023
Duplicates

There is 1 duplicate copy of this file in the archive:

File contents
   10REM: ABSOL
   20MODE7
   30HIMEM=&3C00
   40DIM save 50
   50diff=&8000-HIMEM
   60address=&70
   70comvec=&F2
   80romnumber=&F4
   90workspace=&DF0
  100gsread=&FFC5
  110osbyte=&FFF4
  120oscli=&FFF7
  130FOR pass = 0 TO 2 STEP 2
  140P%=HIMEM
  150[OPT pass
  160BRK
  170BRK
  180BRK
  190JMP service+diff
  200OPT FNequb(&82)
  210OPT FNequb((copyright+diff) MOD 256)
  220BRK
  230.title
  240OPT FNequs("STATIC")
  250.copyright
  260BRK
  270OPT FNequs("(C) Gordon Horsington 1987")
  280BRK
  290.service
  300CMP #1
  310BNE trytwo
  320CPY #&0F
  330BCS carryon
  340INY \ Increment absolute workspace
  350.carryon
  360RTS
  370.trytwo
  380PHA
  390CMP #2
  400BNE tryten
  410TYA
  420STA workspace,X
  430INY \ 256 bytes of private workspace
  440PLA
  450RTS
  460.tryten
  470CMP #&0A
  480BNE tryfour
  490\ Prepare to release
  500\ absolute workspace
  510.enough
  520PLA
  530RTS
  540.tryfour
  550CMP #4
  560BNE enough
  570TXA
  580PHA
  590TYA
  600PHA
  610LDX #&FF
  620.comloop
  630INX
  640LDA title+diff,X
  650BEQ found
  660LDA (comvec),Y
  670INY
  680CMP #ASC(".")
  690BEQ found
  700AND #&DF
  710CMP title+diff,X
  720BEQ comloop
  730PLA
  740TAY
  750PLA
  760TAX
  770PLA
  780RTS
  790.found
  800LDA #&8F
  810LDX #&0A \ issue service call &0A to
  820LDY #&FF
  830JSR osbyte \ claim absolute workspace
  840\ Use zero page from &B0 to &CF
  850\ and absolute workspace as well
  860\ as private workspace.
  870PLA
  880PLA
  890PLA
  900LDA #0
  910RTS
  920.lastbyte
  930]
  940NEXT
  950INPUT'"Save filename = "filename$
  960IF filename$="" END
  970$save="SAVE "+filename$+" "+STR$~(HIMEM)+" "+STR$~(lastbyte)+" FFFF8000 FFFF8000"
  980X%=save MOD 256
  990Y%=save DIV 256
 1000*OPT1,2
 1010CALL oscli
 1020*OPT1,0
 1030END
 1040DEFFNequb(byte)
 1050?P%=byte
 1060P%=P%+1
 1070=pass
 1080DEFFNequw(word)
 1090?P%=word MOD 256
 1100P%?1=word DIV 256
 1110P%=P%+2
 1120=pass
 1130DEFFNequd(double)
 1140!P%=double
 1150P%=P%+4
 1160=pass
 1170DEFFNequs(string$)
 1180$P%=string$
 1190P%=P%+LEN(string$)
 1200=pass

�: ABSOL
�7
�=&3C00
(
� save 50
2diff=&8000-�
<address=&70
Fcomvec=&F2
Promnumber=&F4
Zworkspace=&DF0
dgsread=&FFC5
nosbyte=&FFF4
xoscli=&FFF7
�� pass = 0 � 2 � 2
�P%=�
�
[OPT pass
�BRK
�BRK
�BRK
�JMP service+diff
�OPT �equb(&82)
�%OPT �equb((copyright+diff) � 256)
�BRK
�
.title
�OPT �equs("STATIC")
�.copyright
BRK
+OPT �equs("(C) Gordon Horsington 1987")
BRK
".service
,
CMP #1
6BNE trytwo
@CPY #&0F
JBCS carryon
T&INY \ Increment absolute workspace
^.carryon
hRTS
r.trytwo
|PHA
�
CMP #2
�BNE tryten
�TYA
�STA workspace,X
�(INY \ 256 bytes of private workspace
�PLA
�RTS
�.tryten
�CMP #&0A
�BNE tryfour
�\ Prepare to release
�\ absolute workspace
�.enough
PLA
RTS
.tryfour
&
CMP #4
0BNE enough
:TXA
DPHA
NTYA
XPHA
bLDX #&FF
l.comloop
vINX
�LDA title+diff,X
�
BEQ found
�LDA (comvec),Y
�INY
�CMP #�(".")
�
BEQ found
�
� #&DF
�CMP title+diff,X
�BEQ comloop
�PLA
�TAY
�PLA
�TAX
PLA
RTS

.found
 LDA #&8F
*(LDX #&0A \ issue service call &0A to
4LDY #&FF
>)JSR osbyte \ claim absolute workspace
H#\ Use zero page from &B0 to &CF
R$\ and absolute workspace as well
\\ as private workspace.
fPLA
pPLA
zPLA
�
LDA #0
�RTS
�
.lastbyte
�]
��
�!�'"Save filename = "filename$
�� filename$="" �
�K$save="SAVE "+filename$+" "+�~(�)+" "+�~(lastbyte)+" FFFF8000 FFFF8000"
�X%=save � 256
�Y%=save � 256
�*OPT1,2
�� oscli
�*OPT1,0
�
ݤequb(byte)
?P%=byte
$P%=P%+1
.	=pass
8ݤequw(word)
B?P%=word � 256
LP%?1=word � 256
VP%=P%+2
`	=pass
jݤequd(double)
t!P%=double
~P%=P%+4
�	=pass
�ݤequs(string$)
�$P%=string$
�P%=P%+�(string$)
�	=pass
�
00000000  0d 00 0a 0c f4 3a 20 41  42 53 4f 4c 0d 00 14 06  |.....: ABSOL....|
00000010  eb 37 0d 00 1e 0b d3 3d  26 33 43 30 30 0d 00 28  |.7.....=&3C00..(|
00000020  0d de 20 73 61 76 65 20  35 30 0d 00 32 10 64 69  |.. save 50..2.di|
00000030  66 66 3d 26 38 30 30 30  2d 93 0d 00 3c 0f 61 64  |ff=&8000-...<.ad|
00000040  64 72 65 73 73 3d 26 37  30 0d 00 46 0e 63 6f 6d  |dress=&70..F.com|
00000050  76 65 63 3d 26 46 32 0d  00 50 11 72 6f 6d 6e 75  |vec=&F2..P.romnu|
00000060  6d 62 65 72 3d 26 46 34  0d 00 5a 12 77 6f 72 6b  |mber=&F4..Z.work|
00000070  73 70 61 63 65 3d 26 44  46 30 0d 00 64 10 67 73  |space=&DF0..d.gs|
00000080  72 65 61 64 3d 26 46 46  43 35 0d 00 6e 10 6f 73  |read=&FFC5..n.os|
00000090  62 79 74 65 3d 26 46 46  46 34 0d 00 78 0f 6f 73  |byte=&FFF4..x.os|
000000a0  63 6c 69 3d 26 46 46 46  37 0d 00 82 16 e3 20 70  |cli=&FFF7..... p|
000000b0  61 73 73 20 3d 20 30 20  b8 20 32 20 88 20 32 0d  |ass = 0 . 2 . 2.|
000000c0  00 8c 08 50 25 3d 93 0d  00 96 0d 5b 4f 50 54 20  |...P%=.....[OPT |
000000d0  70 61 73 73 0d 00 a0 07  42 52 4b 0d 00 aa 07 42  |pass....BRK....B|
000000e0  52 4b 0d 00 b4 07 42 52  4b 0d 00 be 14 4a 4d 50  |RK....BRK....JMP|
000000f0  20 73 65 72 76 69 63 65  2b 64 69 66 66 0d 00 c8  | service+diff...|
00000100  12 4f 50 54 20 a4 65 71  75 62 28 26 38 32 29 0d  |.OPT .equb(&82).|
00000110  00 d2 25 4f 50 54 20 a4  65 71 75 62 28 28 63 6f  |..%OPT .equb((co|
00000120  70 79 72 69 67 68 74 2b  64 69 66 66 29 20 83 20  |pyright+diff) . |
00000130  32 35 36 29 0d 00 dc 07  42 52 4b 0d 00 e6 0a 2e  |256)....BRK.....|
00000140  74 69 74 6c 65 0d 00 f0  17 4f 50 54 20 a4 65 71  |title....OPT .eq|
00000150  75 73 28 22 53 54 41 54  49 43 22 29 0d 00 fa 0e  |us("STATIC")....|
00000160  2e 63 6f 70 79 72 69 67  68 74 0d 01 04 07 42 52  |.copyright....BR|
00000170  4b 0d 01 0e 2b 4f 50 54  20 a4 65 71 75 73 28 22  |K...+OPT .equs("|
00000180  28 43 29 20 47 6f 72 64  6f 6e 20 48 6f 72 73 69  |(C) Gordon Horsi|
00000190  6e 67 74 6f 6e 20 31 39  38 37 22 29 0d 01 18 07  |ngton 1987")....|
000001a0  42 52 4b 0d 01 22 0c 2e  73 65 72 76 69 63 65 0d  |BRK.."..service.|
000001b0  01 2c 0a 43 4d 50 20 23  31 0d 01 36 0e 42 4e 45  |.,.CMP #1..6.BNE|
000001c0  20 74 72 79 74 77 6f 0d  01 40 0c 43 50 59 20 23  | trytwo..@.CPY #|
000001d0  26 30 46 0d 01 4a 0f 42  43 53 20 63 61 72 72 79  |&0F..J.BCS carry|
000001e0  6f 6e 0d 01 54 26 49 4e  59 20 5c 20 49 6e 63 72  |on..T&INY \ Incr|
000001f0  65 6d 65 6e 74 20 61 62  73 6f 6c 75 74 65 20 77  |ement absolute w|
00000200  6f 72 6b 73 70 61 63 65  0d 01 5e 0c 2e 63 61 72  |orkspace..^..car|
00000210  72 79 6f 6e 0d 01 68 07  52 54 53 0d 01 72 0b 2e  |ryon..h.RTS..r..|
00000220  74 72 79 74 77 6f 0d 01  7c 07 50 48 41 0d 01 86  |trytwo..|.PHA...|
00000230  0a 43 4d 50 20 23 32 0d  01 90 0e 42 4e 45 20 74  |.CMP #2....BNE t|
00000240  72 79 74 65 6e 0d 01 9a  07 54 59 41 0d 01 a4 13  |ryten....TYA....|
00000250  53 54 41 20 77 6f 72 6b  73 70 61 63 65 2c 58 0d  |STA workspace,X.|
00000260  01 ae 28 49 4e 59 20 5c  20 32 35 36 20 62 79 74  |..(INY \ 256 byt|
00000270  65 73 20 6f 66 20 70 72  69 76 61 74 65 20 77 6f  |es of private wo|
00000280  72 6b 73 70 61 63 65 0d  01 b8 07 50 4c 41 0d 01  |rkspace....PLA..|
00000290  c2 07 52 54 53 0d 01 cc  0b 2e 74 72 79 74 65 6e  |..RTS.....tryten|
000002a0  0d 01 d6 0c 43 4d 50 20  23 26 30 41 0d 01 e0 0f  |....CMP #&0A....|
000002b0  42 4e 45 20 74 72 79 66  6f 75 72 0d 01 ea 18 5c  |BNE tryfour....\|
000002c0  20 50 72 65 70 61 72 65  20 74 6f 20 72 65 6c 65  | Prepare to rele|
000002d0  61 73 65 0d 01 f4 18 5c  20 61 62 73 6f 6c 75 74  |ase....\ absolut|
000002e0  65 20 77 6f 72 6b 73 70  61 63 65 0d 01 fe 0b 2e  |e workspace.....|
000002f0  65 6e 6f 75 67 68 0d 02  08 07 50 4c 41 0d 02 12  |enough....PLA...|
00000300  07 52 54 53 0d 02 1c 0c  2e 74 72 79 66 6f 75 72  |.RTS.....tryfour|
00000310  0d 02 26 0a 43 4d 50 20  23 34 0d 02 30 0e 42 4e  |..&.CMP #4..0.BN|
00000320  45 20 65 6e 6f 75 67 68  0d 02 3a 07 54 58 41 0d  |E enough..:.TXA.|
00000330  02 44 07 50 48 41 0d 02  4e 07 54 59 41 0d 02 58  |.D.PHA..N.TYA..X|
00000340  07 50 48 41 0d 02 62 0c  4c 44 58 20 23 26 46 46  |.PHA..b.LDX #&FF|
00000350  0d 02 6c 0c 2e 63 6f 6d  6c 6f 6f 70 0d 02 76 07  |..l..comloop..v.|
00000360  49 4e 58 0d 02 80 14 4c  44 41 20 74 69 74 6c 65  |INX....LDA title|
00000370  2b 64 69 66 66 2c 58 0d  02 8a 0d 42 45 51 20 66  |+diff,X....BEQ f|
00000380  6f 75 6e 64 0d 02 94 12  4c 44 41 20 28 63 6f 6d  |ound....LDA (com|
00000390  76 65 63 29 2c 59 0d 02  9e 07 49 4e 59 0d 02 a8  |vec),Y....INY...|
000003a0  0f 43 4d 50 20 23 97 28  22 2e 22 29 0d 02 b2 0d  |.CMP #.(".")....|
000003b0  42 45 51 20 66 6f 75 6e  64 0d 02 bc 0a 80 20 23  |BEQ found..... #|
000003c0  26 44 46 0d 02 c6 14 43  4d 50 20 74 69 74 6c 65  |&DF....CMP title|
000003d0  2b 64 69 66 66 2c 58 0d  02 d0 0f 42 45 51 20 63  |+diff,X....BEQ c|
000003e0  6f 6d 6c 6f 6f 70 0d 02  da 07 50 4c 41 0d 02 e4  |omloop....PLA...|
000003f0  07 54 41 59 0d 02 ee 07  50 4c 41 0d 02 f8 07 54  |.TAY....PLA....T|
00000400  41 58 0d 03 02 07 50 4c  41 0d 03 0c 07 52 54 53  |AX....PLA....RTS|
00000410  0d 03 16 0a 2e 66 6f 75  6e 64 0d 03 20 0c 4c 44  |.....found.. .LD|
00000420  41 20 23 26 38 46 0d 03  2a 28 4c 44 58 20 23 26  |A #&8F..*(LDX #&|
00000430  30 41 20 5c 20 69 73 73  75 65 20 73 65 72 76 69  |0A \ issue servi|
00000440  63 65 20 63 61 6c 6c 20  26 30 41 20 74 6f 0d 03  |ce call &0A to..|
00000450  34 0c 4c 44 59 20 23 26  46 46 0d 03 3e 29 4a 53  |4.LDY #&FF..>)JS|
00000460  52 20 6f 73 62 79 74 65  20 5c 20 63 6c 61 69 6d  |R osbyte \ claim|
00000470  20 61 62 73 6f 6c 75 74  65 20 77 6f 72 6b 73 70  | absolute worksp|
00000480  61 63 65 0d 03 48 23 5c  20 55 73 65 20 7a 65 72  |ace..H#\ Use zer|
00000490  6f 20 70 61 67 65 20 66  72 6f 6d 20 26 42 30 20  |o page from &B0 |
000004a0  74 6f 20 26 43 46 0d 03  52 24 5c 20 61 6e 64 20  |to &CF..R$\ and |
000004b0  61 62 73 6f 6c 75 74 65  20 77 6f 72 6b 73 70 61  |absolute workspa|
000004c0  63 65 20 61 73 20 77 65  6c 6c 0d 03 5c 1b 5c 20  |ce as well..\.\ |
000004d0  61 73 20 70 72 69 76 61  74 65 20 77 6f 72 6b 73  |as private works|
000004e0  70 61 63 65 2e 0d 03 66  07 50 4c 41 0d 03 70 07  |pace...f.PLA..p.|
000004f0  50 4c 41 0d 03 7a 07 50  4c 41 0d 03 84 0a 4c 44  |PLA..z.PLA....LD|
00000500  41 20 23 30 0d 03 8e 07  52 54 53 0d 03 98 0d 2e  |A #0....RTS.....|
00000510  6c 61 73 74 62 79 74 65  0d 03 a2 05 5d 0d 03 ac  |lastbyte....]...|
00000520  05 ed 0d 03 b6 21 e8 27  22 53 61 76 65 20 66 69  |.....!.'"Save fi|
00000530  6c 65 6e 61 6d 65 20 3d  20 22 66 69 6c 65 6e 61  |lename = "filena|
00000540  6d 65 24 0d 03 c0 14 e7  20 66 69 6c 65 6e 61 6d  |me$..... filenam|
00000550  65 24 3d 22 22 20 e0 0d  03 ca 4b 24 73 61 76 65  |e$="" ....K$save|
00000560  3d 22 53 41 56 45 20 22  2b 66 69 6c 65 6e 61 6d  |="SAVE "+filenam|
00000570  65 24 2b 22 20 22 2b c3  7e 28 93 29 2b 22 20 22  |e$+" "+.~(.)+" "|
00000580  2b c3 7e 28 6c 61 73 74  62 79 74 65 29 2b 22 20  |+.~(lastbyte)+" |
00000590  46 46 46 46 38 30 30 30  20 46 46 46 46 38 30 30  |FFFF8000 FFFF800|
000005a0  30 22 0d 03 d4 11 58 25  3d 73 61 76 65 20 83 20  |0"....X%=save . |
000005b0  32 35 36 0d 03 de 11 59  25 3d 73 61 76 65 20 81  |256....Y%=save .|
000005c0  20 32 35 36 0d 03 e8 0b  2a 4f 50 54 31 2c 32 0d  | 256....*OPT1,2.|
000005d0  03 f2 0b d6 20 6f 73 63  6c 69 0d 03 fc 0b 2a 4f  |.... oscli....*O|
000005e0  50 54 31 2c 30 0d 04 06  05 e0 0d 04 10 10 dd a4  |PT1,0...........|
000005f0  65 71 75 62 28 62 79 74  65 29 0d 04 1a 0c 3f 50  |equb(byte)....?P|
00000600  25 3d 62 79 74 65 0d 04  24 0b 50 25 3d 50 25 2b  |%=byte..$.P%=P%+|
00000610  31 0d 04 2e 09 3d 70 61  73 73 0d 04 38 10 dd a4  |1....=pass..8...|
00000620  65 71 75 77 28 77 6f 72  64 29 0d 04 42 12 3f 50  |equw(word)..B.?P|
00000630  25 3d 77 6f 72 64 20 83  20 32 35 36 0d 04 4c 13  |%=word . 256..L.|
00000640  50 25 3f 31 3d 77 6f 72  64 20 81 20 32 35 36 0d  |P%?1=word . 256.|
00000650  04 56 0b 50 25 3d 50 25  2b 32 0d 04 60 09 3d 70  |.V.P%=P%+2..`.=p|
00000660  61 73 73 0d 04 6a 12 dd  a4 65 71 75 64 28 64 6f  |ass..j...equd(do|
00000670  75 62 6c 65 29 0d 04 74  0e 21 50 25 3d 64 6f 75  |uble)..t.!P%=dou|
00000680  62 6c 65 0d 04 7e 0b 50  25 3d 50 25 2b 34 0d 04  |ble..~.P%=P%+4..|
00000690  88 09 3d 70 61 73 73 0d  04 92 13 dd a4 65 71 75  |..=pass......equ|
000006a0  73 28 73 74 72 69 6e 67  24 29 0d 04 9c 0f 24 50  |s(string$)....$P|
000006b0  25 3d 73 74 72 69 6e 67  24 0d 04 a6 14 50 25 3d  |%=string$....P%=|
000006c0  50 25 2b a9 28 73 74 72  69 6e 67 24 29 0d 04 b0  |P%+.(string$)...|
000006d0  09 3d 70 61 73 73 0d ff                           |.=pass..|
000006d8
15-01-88/ABSOL.m0
15-01-88/ABSOL.m1
15-01-88/ABSOL.m2
15-01-88/ABSOL.m4
15-01-88/ABSOL.m5