Advertisement
Zeda

GetCatalogElement (2)

Aug 5th, 2015
620
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;;this version directly searches for the catalog data, instead of relying on the user for help and destroying the catalog hook
  2.  
  3. _ConvKeyToTok=4A02h
  4. ;_Get_Tok_Strng=4594h
  5. ;_CreateTempString=4324h
  6. _ExecuteNewProgram=4C3Ch
  7. _RclAns=4AD7h
  8. _ConvOP1=4AEFh
  9. keyExtend=8446h
  10. OP1=8478h
  11. OP3=OP1+33
  12. ;_OP4ToOP1=4138h
  13. _SetXXXXOP2=4792h
  14. _OP2ToOP1=4156h
  15. _StoAns=4ABFh
  16.  
  17. #define bcall(x) rst 28h \ .dw x
  18. .db $BB,$6D
  19. .org $9D95
  20. SetUpCatalogElement:
  21.  
  22. ;;search for the the catalog stuff
  23.     in a,(6)
  24.     ld (pagereturn),a
  25.     ld d,a      ;return page
  26.     xor a
  27.     out (6),a   ;start at page 0
  28.     ld c,a
  29.     ld hl,4000h
  30.     ld b,h
  31. searchloop:
  32.     ld a,-2
  33.     cpir
  34.     jr z,$+7
  35.     call incmem+2
  36.     jr searchloop-1
  37.     inc l
  38.     call z,incmem
  39.     ld a,(hl)
  40.     cp 9
  41.     jr nz,searchloop
  42.     inc l
  43.     call z,incmem
  44.     ld a,(hl)
  45.     add a,2
  46.     jr nz,searchloop
  47.     inc l
  48.     call z,incmem
  49.     ld a,(hl)
  50.     cp 16
  51.     jr nz,searchloop
  52. ;;match found at HL-3
  53.     in a,(6)
  54.     ld e,a
  55.     ld a,d
  56.     out (6),a
  57.     dec hl
  58.     dec hl
  59.     dec hl
  60.     ld a,h
  61.     add a,40h
  62.     jp m,$+5
  63.     ld h,a
  64.     dec e
  65.     ld a,e
  66.     ld (pagebase),a
  67.     ld (tablestart),hl
  68.     ex de,hl
  69.     ld hl,-19Ch
  70.     add hl,de
  71.     ld a,(hl)
  72.     inc hl
  73.     ld h,(hl)
  74.     ld l,a
  75.     or a
  76.     sbc hl,de
  77.     rr h
  78.     rr l
  79.     ld (tablesize),hl     ;need to find some way to actually get this
  80.    
  81.     ld hl,progname
  82.     ld a,6
  83.     bcall(_ExecuteNewProgram)
  84.     ret
  85. progname:
  86.   .db "CATELEM",0
  87.   .dw progend-progstart
  88. progstart:
  89.     .db $BB,$6D
  90.     bcall(_RclAns)
  91.     and $1F
  92.     ret nz
  93.     bcall(_ConvOP1)
  94. tablesize =$+1
  95.     ld hl,0
  96.     or d
  97.     jr z,returnsize
  98.     dec de
  99.     sla e
  100.     rl d
  101.     add hl,de
  102.     jr c,dne
  103. tablestart=$+1
  104.     ld hl,0
  105. pagebase=$+1
  106.     ld a,1
  107.     out (6),a
  108.     add hl,de
  109.     ld a,(hl)
  110. ;FF=>FE, FD=>0
  111.     cp $FD
  112.     jr nz,$+3
  113.     xor a
  114.     add a,1
  115.     sbc a,1
  116.     ld c,a
  117.     inc hl
  118.     ld a,(hl)
  119.     ld (keyExtend),a
  120.     jr z,$+3
  121.     ld a,c
  122.     bcall(_ConvKeyToTok)
  123. pagereturn=$+1
  124.     ld a,7
  125.     out (6),a
  126.     ld c,1
  127.     ld hl,OP3+1
  128.     ld (hl),e
  129.     inc d
  130.     dec d
  131.     jr z,$+5
  132.     dec l
  133.     ld (hl),d
  134.     inc c
  135. outstr:
  136.     ld b,0
  137.     push hl
  138.     push bc
  139.     ld a,7
  140.     sub c
  141.     ld c,a
  142.     push bc
  143.     bcall(4B52h)    ;AnsName
  144.     rst 10h
  145.     ld (hl),4
  146.     pop hl
  147.     push de
  148.     inc de    
  149.     inc de
  150.     ex de,hl
  151.     bcall(4357h)    ;delmem
  152.     pop hl
  153.     pop bc
  154.     pop de
  155.     ld (hl),c
  156.     inc hl
  157.     ld (hl),b
  158.     inc hl
  159.     ex de,hl
  160.     ldir
  161.     ret
  162. dne:
  163.     ld c,3
  164.     ld hl,s_dne
  165.     jr outstr
  166. returnsize:
  167.     sub l
  168.     ld l,a
  169.     sbc a,a
  170.     sub h
  171.     ld h,a
  172.     srl h
  173.     rr l
  174.     inc hl
  175.     bcall(_SetXXXXOP2)
  176.     bcall(_OP2ToOP1)
  177. stoans:
  178.     bcall(_StoAns)
  179.     ret
  180. s_dne=$-progstart+$9D93
  181. .db "DNE"
  182. progend:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement