;
;      File - DEC5 AAAAAAAAAAAAA
usrham
 LdyIM 1
 LdaIY &F0
 Tax
 LdaAX hamtab
 Bmi usf
 AndIM &0F
usf StaIY &F0
 Jmp swexit
;
usrts
 LdyIM 1
 LdaIY &F0
 Sta zp0
 Iny
 LdaIY &F0
 Sta zp1
 LdxIM 20
 LdyIM 0
u1 LdaAX TSbuff
 StaIY zp0
 Inx
 Iny
 CpyIM 20
 Bne u1
 Jmp swexit
;    DEC 5 AAAAAAAAAAAAAAA
;
Herman
 LdyIM 0
zerm00
 LdaAY ctrlbl+inuse
 RolA
 Bpl zerm01
 LdaAY ctrlbl+specia
 RolA
 Bpl Hermie
zerm01 Tya
 Clc
 AdcIM CBlen
 Tay
 CmpIM (nopage*CBlen)
 Bne zerm00
 LdaIM 1
 Tay
 StaIY &F0
 Jmp swexit
Hermie
;
;
;
;
;
;
 LDX select
 LdaAX ctrlbl+specia
 OraIM flagbi
 StaAX ctrlbl+specia
 LdaIM 0
 LdyIM 1
 StaIY &F0 ;  and conditional on inuse flag.
 jmp swexit
DeHerm LDX select
 LdaAX ctrlbl+specia
 PHA ; Note whether Hermanned or not.
 AndIM TIM01
 StaAX ctrlbl+specia
 PLA
 ASLA
 BPL DeHnot
 LdaIM 0
Dehrsl LdyIM 1
 StaIY &F0 ;  and conditional on inuse flag.
 jmp swexit
DeHnot
 LdaIM 1
 Jmp Dehrsl
Solidi ; Copy CB 'select' into CB 0 slot.
;  i.e.  make this page the one from which links are got.
;     Also used on exit from TERMn if exiting to telesoftware
;     because only one CB can exist outside Terminal mode.
; ********* Who makes sure CB0 contains data inpriv workspace???*********
 Lda select
 Beq godire
 Sta CurCB2
;\\\\\\\\\\\\\\\ FIRST GET WILD CARDS FROM APPROP. CB INTO param...
 LdaIM 0
 Sta param
 Sta param+1
 Sta param+2
 LdaIM &FF
 Sta param+3
 Sta param+4
 Sta param+5
 Sta param+6
 Jsr Swap00
;\\\\\\\\\\\\\ page becomes un-filled!
godire LdaIM 0
 Sta select  ; Page was in CB0 already.
 Jmp swexit
Evapou ; Go back to page from which links are being read
 LDA select
;BEQ Evaatt
 LdaIM 0
 Sta select
 Bit ctrlbl+full
 Bvc tstifz
 Bit ctrlbl+crcok
;Bvc tstifz
 Lda ctrlbl+upda00
 OraIM flagbi
 Sta ctrlbl+upda00
tstifz
 LdaIM 0
Evarsl LdyIM 1
 StaIY &F0
 Jmp swexit
Evaatt
 LdaIM 1
 Jmp Evarsl
OfferA
; All space between &3000 and &7000 In &800 chunks
 LdaIM &83
 Jsr osbyte
 Stx scratc
 Sty scra00
 LdyIM 0
OffLoo LdaIM :LSB: ARGcon
 Sta zp0
 LdaIM :MSB: ARGcon
 Sta zp1
 Iny ; Y=1 -> slot number
; AddA1 page size to scratc  If > &7100, goto Offend
 Lda scratc ; low 
 STA ARGcon+2
 Clc
 AdcIM :LSB: 1538
 Sta scratc
 Lda scra00
 STA ARGcon+3
 AdcIM :MSB: 1538
 Sta scra00
 CmpIM &71
 Bcs Offend
 Txa
 Pha
 Tya
 Pha
 STY ARGcon+1
 LdyIM 1
 ldaIY zp0
 Tax ; Straight crib from Offer CB for quick bodge
 LdaIM 0
MOCB1
 Dex
 Bmi MOCB2
 Clc
 AdcIM CBlen
 JMP MOCB1
MOCB2
 Tax
 LdaIM 0
 StaAX ctrlbl+inuse
 iny
 LdaIY zp0
 StaAX ctrlbl
 Iny
 LdaIY zp0
 StaAX ctrlbl+1
 LdaIM 0
 LdyIM CBlen-2-1
MOCB3
 StaAX ctrlbl+2
 INX
 DEY
 Bne MOCB3
 LdaIM flagbi
 StaAX ctrlbl+2
 LDAAX ctrlbl+2-inuse
 STA zp0
 LDAAX ctrlbl+2+1-inuse
 STA zp1
 LDYIM 0
 LDAIM 32
 STAIY zp0
;
 Pla
 Tay
 Pla
 Tax
 Jmp OffLoo
Offend
 Jmp swexit
Div6
 = 0
 = 0
 = 0
 = 0
 = 0
 = 0
 = 1
 = 1
 = 1
 = 1
 = 1
 = 1
 = 2
 = 2
 = 2
 = 2
 = 2
 = 2
 = 3
 = 3
 = 3
 = 3
 = 3
 = 3
Mod6
 = 09
 = 15
 = 21
 = 27
 = 33
 = 39
 = 09
 = 15
 = 21
 = 27
 = 33
 = 39
 = 09
 = 15
 = 21
 = 27
 = 33
 = 39
 = 09
 = 15
 = 21
 = 27
 = 33
 = 39
;=============================================================
OSWsel
; CB 0 for links, then generate a page request
; as normal so it finds the page in the cache
; if present, or requests the page if not.
 LdyIM 1
 LdaIY &F0 ; A = Link no. from CB.
 CmpIM 24
 Bcc OSWsl0
 LdaIM 3 ;< Illegal link no. >
 LdyIM 2
 StaIY &F0
 Jmp swexit
OSWsl0 TAY
 LdaIM :MSB: (Sele00-1)
 Pha
 LdaIM :LSB: (Sele00-1)
 PHA
 JMP OSWali
OSWsl1
 TAY
;\\************* Push address which this code jumps to on the stack
;\\              so an RTS does an effective jump at the end........
 LDAIM :MSB: (SElIIp-1)
 PHA
 LDAIM :LSB: (SElIIp-1)
 PHA
OSWali  ; Comes to here from above with different return address set up.
;   Y = link no here!!!!!!1
 LDAAY Div6
 STA scratc      ;\\\\\\ SCRATCH 0 IS DESIGNATION CODE OF ROW
 LDAAY Mod6      ;
 STA scra00      ;\\\\\\ SCRATCH 1 IS OFFSET IN ROW
;
 LDA ctrlbl
 STA zp0
 LDA ctrlbl+1
 STA zp1
 LDYIM 2
 LDAIM 2
 STAIY &F0    ; Default is no links present
 LDYIM 1
 LDAIY zp0
 SEC
 SBCIM (26+1)
 PHA ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|PUSH PUSH PUSH
 Clc
 Lda zp0
 AdcIM :LSB: (pagehe+(40+pageju)*26)
 STA zp0
 LDA zp1
 ADCIM :MSB: (pagehe+(40+pageju)*26)
 Sta zp1
; No. of rows remaining on stack
sell02
 PLA ;\\\\\\\\\\\\\\\\\\\\\\\\\\\|PULL  PULL  PULL
 EorIM 0
 Bpl sell03 ; So use old plus wildcas
;****************************** Add code here...
 PLA
 PLA  ; ************************ pop silly return address
 jmp swexit
sell03
 
 Sec
 SbcIM 1 ; Decrement loop count
 PHA ; \\\\\\\\\\\\\\\\\\\\\\\\\\\\|PUSH PUSH PUSH
 LdyIM 0
 LdaIY zp0
; Get row/no. & desig. code
 CmpIM 27
 Beq sell00
 Jmp sellin
sell00
; Row 27 - so if no link found, must be 'no such link'
;          rather than 'no links present'.
 LdyIM 2
 LdaIM 1
 StaIY &F0
 LdyIM pageju
 LdaIY zp0
 Tay
 LdaAY hamtab
 Bmi gotose ; hammin error
 AndIM &0F
 Cmp scratc  ; ***************************** designationcode (TO BE SET UP)
 Beq loadsc
gotose JMP sellin
loadsc
;
; NowAY row with link pointed to by (zp0) -- where
; Y is offset found in table, which has 'junkoffset' added already.
;  (in scra00)
;
;
 Lda scra00
 Tay
 LdaIY zp0
 Tax
 Jsr hammin
 Bmi gotose
 Sta param+2 ; P1
 Iny
 LdaIY zp0
 Tax
 Jsr hammin
 Bmi gotose
 Sta param+1 ; P10
 Iny
 LdaIY zp0
 Tax
 Jsr hammin
 Bmi gotose
 Sta param+6 ; S1
 Iny
 LdaIY zp0
 Tax
 Jsr hammin
 Bmi gotose
 Pha
 AndIM 7
 Sta param+5 ; S10
 Pla
 LSRA
 LSRA
 LSRA
 Pha
 Iny
 LdaIY zp0
 Tax
 Jsr hammin
 Bpl Stapar
goto00 JMP sell01
Stapar Sta param+4 ; S100
 Iny
 LdaIY zp0
 Tax
 Jsr hammin
 Bmi goto00
 Pha
 AndIM 3
 Sta param+3 ; S1000
 Pla
 LSRA
 AndIM 6
 Sta zp0 ; ZP0 No longer point to row!!!!!!!
 Pla
 Ora zp0
 Eor ctrlbl+2
 AndIM 7
 Sta param+0 ; Magazine
;
 LdaIM 0
 LdyIM 2
 StaIY &F0
;
;
;
;
; SET UP CONDITION CODE FOR SUCCESS HERE...
; FIND A MATCHING CB :AND: SET 'select' TO IT, 
; OTHERWISE GENERATE ONE FROM 'param' and ditto.
 PLA ;\\\\\\\\\\\\\\\\\\\\\\\\\\\|PULL PULL PULL
;*********** TEMP TEMP TEMP *************
 RTS ;\\\\\\||********** Unconventional (sic) jump to SelII...
;(Unless entry was via link-select code for TERM.)
 JMP SelIIp
 Jmp swexit
sell01
 PLA ; balance stack on error exit
sellin
 Lda zp0
 Clc
 AdcIM (pageju+40)
 Sta zp0
 Lda zp1
 AdcIM 0
 Sta zp1
 Jmp sell02
;
 LNK DEC6