* CMPSC max symbol size 260 expansion including 3 page vstore
*       max symbol size 260 compression
*       option for symbol translation (uncomment line 29)
*       option for data exception on expanding character 261 (uncomment line 92)
*       option for data exception on compressing character 261 (uncomment line 148)
*
* Prepare
*log log.txt
stopall
pause 1
sysclear
archmode esame
t+
*
* PSW values
r 01A0=00000001800000000000000000001000 # z/Arch restart PSW
r 01D0=0002000180000000000000000000DEAD # z/Arch pgm new PSW
r 0F00=07020001800000000000000000000000 # Enabled wait state PSW
*
* The program
r 1000=C00100005100 # LGFI R0,X'5100' zp=0,st=0,cdss=5,f1=0,e=1
r 1006=C01100002000 # LGFI R1,X'2000' dictor=2000,sttoff=0,cbn=0
r 100C=C02100006FF0 # LGFI R2,X'6FF0' output address, force 3 page use
r 1012=C03100000924 # LGFI R3,X'0924' output lenght, 9*L260
r 1018=C04100005000 # LGFI R4,X'5000' input address
r 101E=C0510000000F # LGFI R5,X'000F' input length, space for 9*0x100
r 1024=B2630024     # CMPSC R2,R4     fingers crossed
r 1028=C00100005000 # LGFI R0,X'5000' zp=0,st=0,cdss=5,f1=0,e=0
*r 1028=C00100015000 # LGFI R0,X'15000' same as previous, but st=1
r 102E=C01100003100 # LGFI R1,X'3100' dictor=3000,sttoff=1000,cbn=0
r 1034=C02100008000 # LGFI R2,X'8000' output address
r 103A=C0310000000F # LGFI R3,X'000F' output length, 9*0x100
r 1040=C04100006FF0 # LGFI R4,X'6FF0' input address
r 1046=C05100000924 # LGFI R5,X'0924' input length, 9*L260
r 104C=B2630024     # CMPSC R2,R4     fingers crossed
r 1050=B2B20F00     # LPSWE WAITPSW   load enabled wait PSW
*
* Expansion dictionary
r 2000=0000000000000000 # It starts here, but alphabet entries are conform POP never referenced
r 2800=A101FF12345678FF # Index symbol 100: psl=5,pptr=101,ecs=FF12345678,ofst=FF
r 2808=A102FFFFFFFFFFFA # Index symbol 101: psl=5,pptr=102,ecs=FFFFFFFFFF,ofst=FA
r 2810=A103FFFFFFFFFFF5 # Index symbol 102: psl=5,pptr=103,ecs=FFFFFFFFFF,ofst=F5
r 2818=A104FFFFFFFFFFF0
r 2820=A105EEEEEEEEEEEB
r 2828=A106EEEEEEEEEEE6
r 2830=A107EEEEEEEEEEE1
r 2838=A108DDDDDDDDEEDC
r 2840=A109DDDDDDDDDDD7
r 2848=A10ADDDDDDDDDDD2
r 2850=A10BCCCCCCDDDDCD
r 2858=A10CCCCCCCCCCCC8
r 2860=A10DCCCCCCCCCCC3
r 2868=A10EBBBBCCCCCCBE
r 2870=A10FBBBBBBBBBBB9
r 2878=A110BBBBBBBBBBB4
r 2880=A111AABBBBBBBBAF
r 2888=A112AAAAAAAAAAAA
r 2890=A113AAAAAAAAAAA5
r 2898=A114AAAAAAAAAAA0
r 28A0=A11599999999999B
r 28A8=A116999999999996
r 28B0=A117999999999991
r 28B8=A11888888888998C
r 28C0=A119888888888887
r 28C8=A11A888888888882
r 28D0=A11B77777788887D
r 28D8=A11C777777777778
r 28E0=A11D777777777773
r 28E8=A11E66667777776E
r 28F0=A11F666666666669
r 28F8=A120666666666664
r 2900=A12155666666665F
r 2908=A12255555555555A
r 2910=A123555555555555
r 2918=A124555555555550
r 2920=A12544444444444B
r 2928=A126444444444446
r 2930=A127444444444441
r 2938=A12833333333443C
r 2940=A129333333333337
r 2948=A12A333333333332
r 2950=A12B22222233332D
r 2958=A12C222222222228
r 2960=A12D222222222223
r 2968=A12E11112222221E
r 2970=A12F111111111119
r 2978=A130111111111114
r 2980=A13100111111110F
r 2988=A13200000000000A # Index symbol 131: psl=5,pptr=132,esc=0000000000,ofst=0A
r 2990=A133000000000005 # Index symbol 132: psl=5,pptr=133,ecs=0000000000,ofst=05
r 2998=050000000000FFFF # Index symbol 133: psl=0,csl=5,ecs=0000000000
*r 2998=06               # force data exception on expanding character entry 261
*
* Compression dictionary
r 3000=3001010000000000 # Alphabet entry   00: cct=1,x=1,act=0,cptr=101,cc=00
r 3808=3081020000000000 # Character entry 101: cct=1,x=1,act=4,pptr=102,ecs=00000000,cc=00
r 3810=3081030000000000 # Character entry 102: cct=1,x=1,act=4,pptr=103,ecs=00000000,cc=00
r 3818=3081040000000011
r 3820=3081051111111111
r 3828=3081061111111111
r 3830=3081071111111111
r 3838=3081082222222222
r 3840=3081092222222222
r 3848=30810A2222222222
r 3850=30810B2233333333
r 3858=30810C3333333333
r 3860=30810D3333333333
r 3868=30810E3333444444
r 3870=30810F4444444444
r 3878=3081104444444444
r 3880=3081114444445555
r 3888=3081125555555555
r 3890=3081135555555555
r 3898=3081145555555566
r 38A0=3081156666666666
r 38A8=3081166666666666
r 38B0=3081176666666666
r 38B8=3081187777777777
r 38C0=3081197777777777
r 38C8=30811A7777777777
r 38D0=30811B7788888888
r 38D8=30811C8888888888
r 38E0=30811D8888888888
r 38E8=30811E8888999999
r 38F0=30811F9999999999
r 38F8=3081209999999999
r 3900=308121999999AAAA
r 3908=308122AAAAAAAAAA
r 3910=308123AAAAAAAAAA
r 3918=308124AAAAAAAABB
r 3920=308125BBBBBBBBBB
r 3928=308126BBBBBBBBBB
r 3930=308127BBBBBBBBBB
r 3938=308128CCCCCCCCCC
r 3940=308129CCCCCCCCCC
r 3948=30812ACCCCCCCCCC
r 3950=30812BCCDDDDDDDD
r 3958=30812CDDDDDDDDDD
r 3960=30812DDDDDDDDDDD
r 3968=30812EDDDDEEEEEE
r 3970=30812FEEEEEEEEEE
r 3978=308130EEEEEEEEEE
r 3980=308131EEEEEEFFFF
r 3988=308132FFFFFFFFFF
r 3990=308133FFFFFFFFFF # Character entry 132: cct=1,x=1,act=4,pptr=133,ecs=FFFFFFFF,cc=FF
r 3998=308134FFFFFFFF12 # Character entry 133: cct=1,x=1,act=4,pptr=134,ecs=FFFFFFFF,cc=12
r 39A0=2041003456780000 # Character entry 134: cct=1,x=0,act=2,pptr=100,ecs=3456,cc=78
*r 39A0=2061             # Force data exception on compressing character entry 261
*
* Symbol translation table
r 4000=0000 # Interchange symbol 0000 for index symbol 0x00
r 4200=1FFF # Interchange symbol 1FFF (all ones) for index symbol 0x100
*
* Input 
r 5000=080040020010008004002001000800   # 9 index symbols 0x100, including 3 ones
*
* Start
restart
pause 1
* Display input
r 5000.f
* Display similar output after expansion and compression, or all ones with symbol translation
r 8000.f
