?login_element?

Subversion Repositories NedoOS

Rev

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

  1. reservepage
  2. ;new page, set page in textpages, npages++, set page in #c000
  3. ;nz=error
  4.         OS_NEWPAGE
  5.         or a
  6.         ret nz
  7. npages=$+1
  8.         ld hl,textpages
  9.         ld (hl),e
  10.         inc l
  11.         ld (npages),hl
  12.         ld a,e
  13.         SETPGC000
  14.         xor a
  15.         ret ;z
  16.  
  17.        if 0
  18. unreservepages
  19. unreservepages0
  20.         call unreservepage
  21.         jr z,unreservepages0
  22.         ret
  23.        
  24. unreservepage
  25. ;del page, npages--
  26. ;nz=error
  27.         ld hl,(npages)
  28.         ld a,l
  29.         or a
  30.         jr z,unreservepage_fail
  31.         dec l
  32.         ld (npages),hl
  33.         ld e,(hl)
  34.         OS_DELPAGE
  35.         xor a
  36.         ret ;z
  37. unreservepage_fail
  38.         xor a
  39.         dec a
  40.         ret ;nz
  41.        
  42. ;reserves page
  43. incfilesize
  44.         ;ld hl,(fcb+FCB_FSIZE)
  45.         call getsize
  46.        
  47.         push af
  48.         push hl
  49.         ld a,h
  50.         and 0x3f
  51.         or l
  52.         call z,reservepage
  53.         pop hl
  54.         pop af
  55.        
  56.         ld bc,1
  57.         add hl,bc
  58.         adc a,b;0
  59.         ld (filesize),hl
  60.         ld (filesizeHSW),a
  61.         ret
  62.  
  63. ;unreserves page
  64. decfilesize
  65.         ;ld hl,(fcb+FCB_FSIZE)
  66.         call getsize
  67.         or a
  68.         ld bc,1
  69.         sbc hl,bc
  70.         sbc a,b;0
  71.         ld (filesize),hl
  72.         ld (filesizeHSW),a
  73.  
  74.         ld a,h
  75.         and 0x3f
  76.         or l
  77.         call z,unreservepage
  78.         ret
  79.  
  80.  
  81. getbyte
  82.         push af
  83.         push hl
  84.         call ahl_to_pgaddr
  85.         ld c,(hl)
  86.         pop hl
  87.         pop af
  88.         ret
  89.  
  90. putbyte
  91.         push af
  92.         push hl
  93.         call ahl_to_pgaddr
  94.         ld (hl),c
  95.         pop hl
  96.         pop af
  97.         ret
  98.  
  99. ahl_to_pgaddr
  100. ;keeps bc,de
  101. ;counts physical hl
  102.         rl h
  103.         rla
  104.         rl h
  105.         rla
  106.         srl h
  107.         scf
  108.         rr h
  109.         push bc
  110.         call setpg32k
  111.         pop bc
  112.         ret
  113.  
  114. setpg32k
  115. ;a=page number in table (0..)
  116.         push hl
  117.         ld l,a
  118.         ld h,textpages/256
  119.         ld a,(hl)
  120.         SETPG8000
  121.         inc l
  122.         ld a,(hl)
  123.         SETPGC000
  124.         pop hl
  125.         ret
  126.        endif
  127.