?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1.     module UnApi
  2. EXTBIOS = #FFCA
  3. TPASLOT1 = #F342
  4. MAPPER = #0402
  5. ARG = #F847
  6. DISCOVER = #2222
  7. ENABLE_SLOT = #0024
  8. TPA_SLOT_1 = #F342
  9.  
  10. preinit:
  11.     ld de, MAPPER
  12.     xor a
  13.     call EXTBIOS
  14.     or a
  15.     jr z, .noMapper
  16.    
  17.     ld bc, 30 ; skip all_segs mapper
  18.     add hl, bc
  19.     ld de, put_p1 ; replace direct routines
  20.     ld c, 6
  21.     ldir
  22.  
  23.     call get_p1
  24.     ld (tpa_seg_1), a
  25.     or a
  26.     ret
  27. .noMapper
  28.     scf
  29.     ret
  30.  
  31. ; HL - string to implementation
  32. initApi:
  33.     ld de, ARG
  34.     ld bc, 15
  35.     ldir
  36. .copied
  37.     xor a
  38.     ld (de), a
  39.     ld b, a
  40.     ld de, DISCOVER
  41.     call EXTBIOS
  42.     ld a, b
  43.     or a
  44.     ld (.num + 1), a
  45.     ret z
  46.    
  47.     ld a, 1 ; First implementation
  48.     ld de, DISCOVER
  49.     call EXTBIOS
  50.  
  51.     ld (unapiCall + 1), hl ; Store address
  52.     ld c, a
  53.     ld a, h
  54.     cp #c0
  55.     ld a, c
  56.     jr c, .noP3
  57.    
  58.     ld a, #c9
  59.     ld (setUnApi), a
  60.     jr .okSet
  61. .noP3
  62.     ld (unApiSlot + 1), a
  63.     ld a, b
  64.     cp #ff
  65.     jr nz, .noRom
  66.  
  67.     ld a, #c9
  68.     ld (unApiSeg), a
  69.     jr .okSet
  70. .noRom
  71.     ld (unApiSeg + 1), a
  72. .okSet
  73.     scf
  74. .num
  75.     ld a, 0
  76.     ret
  77.  
  78. setUnApi:
  79.     ld a, (unapi_is_set)
  80.     or a
  81.     ret nz
  82.     dec a
  83.     ld (unapi_is_set), a
  84. unApiSlot:
  85.     ld a, 0
  86.     ld h, #40
  87.     call ENABLE_SLOT
  88. unApiSeg
  89.     ld a, 0
  90.     jp put_p1
  91.  
  92. callUnApi:
  93.     ex af, af'
  94.    exx
  95.    call setUnApi
  96.    ei
  97.    ex af, af'
  98.     exx
  99. unapiCall:
  100.     jp 0
  101.  
  102. tpaUnApiCall:
  103.     call callUnApi
  104. exit:
  105.     push af, bc, de, hl
  106.     xor a
  107.     ld (unapi_is_set), a
  108.     ld a, (TPA_SLOT_1)
  109.     ld h, #40
  110.     call ENABLE_SLOT
  111.     ld a, (tpa_seg_1)
  112.     call put_p1
  113.     pop hl, de, bc, af
  114.     ret
  115.  
  116. put_p1:
  117.     out (#fe), a
  118.     ret
  119. get_p1:
  120.     in a, (#fe)
  121.     ret
  122.  
  123. tpa_seg_1 db 0
  124. unapi_is_set db 0
  125.     endmodule