;ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
;ЫЫ                                                                          ЫЫ
;ЫЫ      Hard Disk ROM for MSX computer (connect IDE HDD)                    ЫЫ
;ЫЫ      made for IDE card BEER-202                                          ЫЫ
;ЫЫ                                                                          ЫЫ
;ЫЫ      (c) 1984 MicroSoft (Disk Basic version 1.0)                         ЫЫ
;ЫЫ      (c) 1993 SOLIDSOFT (version 1.0)                                    ЫЫ
;ЫЫ      (c) 1995 SOLIDSOFT (version 1.7)                                    ЫЫ
;ЫЫ      (c) 1995 SOLIDSOFT (version 1.8)                                    ЫЫ
;ЫЫ      (c) 2005 SOLIDSOFT (version 1.9) PVV DIZASM                         ЫЫ
;ЫЫ                                                                          ЫЫ
;ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
;
;
; Compile:
;   as hddrom
;   ld hddrom=hddrom
;
  .Z80

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; ROM header
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

  ASEG
  .phase  4000h
  
;
  db  'AB'
  dw  HDD_ROM_Startup
  dw  BasicCallHandler
  dw  0
  dw  0
  dw  0
  dw  0
  dw  0

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; STANDARD DISK BIOS
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

  jp  HDD_SectorIO    ;4010
  jp  HDD_DiskChg   ;4013
  jp  HDD_SetBPB    ;4016
  jp  HDD_Choice    ;4019
  jp  HDD_Format    ;401C
  jp  HDD_StopMotor   ;401F
  jp  HDD_RunDiskBasic  ;4021
  scf
  jp  HDD_CondFormat    ;4024
  jp  StopAll     ;4025
  db  0
sub_402dh:
  jp  GetMySlot   
  ld  hl,(0F34Bh)
  ret

;ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
;
; The area beneath may not be changed, or must be shanged
; very carefully not to affect standard entry points into Disk Driver
;
; All subroutines having names of BDOS_XX type are standard
; entries for DOS-1 functions.
;
;ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Keyboard driver
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

SenseCtrlC: ;sub_4034h:
  push ix   ;4034
  ld ix,000b7h    ;4036
  call BIOS_Call ;sub_40abh    ;403a
  pop ix    ;403d
  jr nc,l404bh    ;403f
  ld a,003h   ;4041
  ld (0f336h),a   ;4043
  ld (0f337h),a   ;4046
  and a     ;4049
  ret     ;404a
l404bh:
  ld a,(0f336h)   ;404b
  and a     ;404e
  ld a,(0f337h)   ;404f
  ret nz      ;4052
  push ix   ;4053
  ld ix,0009ch    ;4055
  call BIOS_Call ;sub_40abh    ;4059
  pop ix    ;405c
  ret z     ;405e
  ld a,0ffh   ;405f
  ld (0f336h),a   ;4061
  push ix   ;4064
  ld ix,0009fh    ;4066
  call BIOS_Call ;sub_40abh    ;406a
  pop ix    ;406d
  ld (0f337h),a   ;406f
  push bc     ;4072
  ld b,000h   ;4073
  inc b     ;4075
  pop bc      ;4076
  ret     ;4077


CharAvail: ;sub_4078h:
  push hl     ;4078
  ld hl,0f336h    ;4079
  xor a     ;407c
  cp (hl)     ;407d
  ld (hl),a     ;407e
  inc hl      ;407f
  ld a,(hl)     ;4080
  pop hl      ;4081
  ret nz      ;4082
  push ix   ;4083
  ld ix,0009fh    ;4085
  call BIOS_Call ;sub_40abh    ;4089
  pop ix    ;408c
  ret     ;408e

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

PutChar: ;sub_408fh:
  push ix   ;408f
  ld ix,000a2h    ;4091
  call BIOS_Call ;sub_40abh    ;4095
  pop ix    ;4098
  ret     ;409a

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

PrintChar: ;l409bh:
  push ix   ;409b
  ld ix,000a5h    ;409d
  call BIOS_Call ;sub_40abh    ;40a1
  pop ix    ;40a4
  ret     ;40a6

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GotoBasic:
  ld ix,PrintChar ;l409bh    ;40a7
BIOS_Call: ;sub_40abh:
  push iy   ;40ab
  ld iy,(0fcc0h)    ;40ad
  call 0001ch   ;40b1
  ei      ;40b4
  pop iy    ;40b5
  ret     ;40b7

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

TestClock: ;sub_40b8h:
  ld a,00dh   ;40b8
  out (0b4h),a    ;40ba
  ld a,00ah   ;40bc
  out (0b5h),a    ;40be
  xor a     ;40c0
  out (0b4h),a    ;40c1
  ld b,00fh   ;40c3
l40c5h:
  in a,(0b5h)   ;40c5
  and 00fh    ;40c7
  xor b     ;40c9
  out (0b5h),a    ;40ca
  ld c,a      ;40cc
  nop     ;40cd
  in a,(0b5h)   ;40ce
  and 00fh    ;40d0
  cp c      ;40d2
  ret nz      ;40d3
  xor b     ;40d4
  out (0b5h),a    ;40d5
  djnz l40c5h   ;40d7
  ld a,0ffh   ;40d9
  ld (0f338h),a   ;40db
  ld a,00dh   ;40de
  out (0b4h),a    ;40e0
  ld a,009h   ;40e2
  out (0b5h),a    ;40e4
  ld a,00ah   ;40e6
  out (0b4h),a    ;40e8
  ld a,001h   ;40ea
  out (0b5h),a    ;40ec
  ld a,00dh   ;40ee
  out (0b4h),a    ;40f0
  xor a     ;40f2
  out (0b5h),a    ;40f3
  ld bc,00d00h    ;40f5
l40f8h:
  ld a,c      ;40f8
  out (0b4h),a    ;40f9
  in a,(0b5h)   ;40fb
  push af     ;40fd
  inc c     ;40fe
  djnz l40f8h   ;40ff
  ld a,00eh   ;4101
  out (0b4h),a    ;4103
  xor a     ;4105
  out (0b5h),a    ;4106
  ld b,00dh   ;4108
l410ah:
  dec c     ;410a
  ld a,c      ;410b
  out (0b4h),a    ;410c
  pop af      ;410e
  out (0b5h),a    ;410f
  djnz l410ah   ;4111
  jr StartClock ;l414eh   ;4113

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

sub_4115h:
  ld (0f33bh),hl    ;4115
  ld a,(0f338h)   ;4118
  and a     ;411b
  ret z     ;411c
  ld a,(0f24ah)   ;411d
  ld b,a      ;4120
  ld a,(0f249h)   ;4121
  ld c,a      ;4124
  ld a,(0f248h)   ;4125
  ld d,a      ;4128
  ld e,007h   ;4129
  call StopClock ;sub_4159h    ;412b
  jr l4142h   ;412e

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

SetCurDate: ;sub_4130h:
  ld a,(0f338h)   ;4130
  and a     ;4133
  ret z     ;4134
  ld e,000h   ;4135
  call StopClock ;sub_4159h    ;4137
  ld a,00fh   ;413a
  out (0b4h),a    ;413c
  ld a,002h   ;413e
  out (0b5h),a    ;4140
l4142h:
  ld h,d      ;4142
  call WrClockB ;sub_4160h    ;4143
  ld h,c      ;4146
  call WrClockB ;sub_4160h    ;4147
  ld h,b      ;414a
  call WrClockB ;sub_4160h    ;414b
StartClock: ;l414eh:
  ld a,00dh   ;414e
  out (0b4h),a    ;4150
  in a,(0b5h)   ;4152
  or 008h   ;4154
l4156h:
  out (0b5h),a    ;4156
  ret     ;4158
StopClock: ;sub_4159h:
  call StartClock ;l414eh   ;4159
  and 004h    ;415c
  jr l4156h   ;415e
WrClockB: ;sub_4160h:
  xor a     ;4160
  ld l,008h   ;4161
l4163h:
  rlc h   ;4163
  adc a,a     ;4165
  daa     ;4166
  dec l     ;4167
  jr nz,l4163h    ;4168
  call NextClocAdr ;sub_4171h    ;416a
  rrca      ;416d
  rrca      ;416e
  rrca      ;416f
  rrca      ;4170
NextClocAdr: ;sub_4171h:
  push af     ;4171
  ld a,e      ;4172
  inc e     ;4173
  out (0b4h),a    ;4174
  pop af      ;4176
  jr l4156h   ;4177

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GetClockDate: ;sub_4179h:
  ld a,(0f338h)   ;4179
  and a     ;417c
  ld b,a      ;417d
  ld c,a      ;417e
  ld d,a      ;417f
  ld e,a      ;4180
  ld hl,(0f33bh)    ;4181
  ret z     ;4184
  call StopClock ;sub_4159h    ;4185
  ld e,00dh   ;4188
  call RdClockB ;sub_41adh    ;418a
  call SetFebDays ;sub_5523h    ;418d
  call RdClockB ;sub_41adh    ;4190
  ld (0f249h),a   ;4193
  call RdClockB ;sub_41adh    ;4196
  ld (0f248h),a   ;4199
  dec e     ;419c
  call RdClockB ;sub_41adh    ;419d
  ld b,a      ;41a0
  call RdClockB ;sub_41adh    ;41a1
  ld c,a      ;41a4
  call RdClockB ;sub_41adh    ;41a5
  call StartClock ;l414eh   ;41a8
  scf     ;41ab
  ret     ;41ac

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

RdClockB: ;sub_41adh:
  xor a     ;41ad
  call RdClock ;sub_41b5h    ;41ae
  add a,a     ;41b1
  add a,a     ;41b2
  add a,d     ;41b3 
  add a,a     ;41b4
RdClock: ;sub_41b5h:
  ld d,a      ;41b5
  dec e     ;41b6
  ld a,e      ;41b7
  out (0b4h),a    ;41b8
  in a,(0b5h)   ;41ba
  and 00fh    ;41bc
  add a,d     ;41be
  ld d,a      ;41bf
  ret     ;41c0
;
  db  'IDE HDD Driver ver 1.80 (C) 1995 by SOLIDSOFT '

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; DOS function -- get version
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_0C:ld  b,0
  ld a,022h   ;41f1
  ret     ;41f3

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Get FAT entry
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GETFAT: ;sub_41f4h:
  ld e,(ix+013h)    ;41f4
  ld d,(ix+014h)    ;41f7
  jp NewGetFAT ;l7416h   ;41fa
OldGetFAT: ;sub_41fdh:
  push de     ;41fd
  ld e,l      ;41fe
  ld d,h      ;41ff
  srl h   ;4200
  rr l    ;4202
  rra     ;4204
  add hl,de     ;4205
  pop de      ;4206
  add hl,de     ;4207
  rla     ;4208
  ld a,(hl)     ;4209
  inc hl      ;420a
  ld h,(hl)     ;420b
  jr nc,l421ah    ;420c
  srl h   ;420e
  rra     ;4210
  srl h   ;4211
  rra     ;4213
  srl h   ;4214
  rra     ;4216
  srl h   ;4217
  rra     ;4219
l421ah:
  ld l,a      ;421a
  ld a,h      ;421b
  and 00fh    ;421c
  ld h,a      ;421e
  or l      ;421f
  ret     ;4220

;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ
l4221h:
  jp l7584h   ;4221

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

PutFAT:
  srl h   ;4224
  rr l    ;4226
  rra     ;4228
  add hl,de     ;4229
  pop de      ;422a
  add hl,de     ;422b
  rla     ;422c
  jr nc,l4247h    ;422d
  sla c   ;422f
  rl b    ;4231
  sla c   ;4233
  rl b    ;4235
  sla c   ;4237
  rl b    ;4239
  sla c   ;423b
  rl b    ;423d
  ld a,(hl)     ;423f
  and 00fh    ;4240
  or c      ;4242
  ld (hl),a     ;4243
  inc hl      ;4244
  ld (hl),b     ;4245
  ret     ;4246
;
l4247h:
  ld (hl),c     ;4247
  inc hl      ;4248
  ld a,(hl)     ;4249
  and 0f0h    ;424a
  or b      ;424c
  ld (hl),a     ;424d
  ret     ;424e

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Compare character strings
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

CompFCB:: ;sub_424fh:
  ld de,0f2b9h    ;424f
CompStr: ;l4252h:
  ld a,(de)     ;4252
  cp (hl)     ;4253
  inc hl      ;4254
  inc de      ;4255
  ret nz      ;4256
  djnz CompStr ;l4252h   ;4257
  ret     ;4259

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;    Check if file name is a device
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

CheckDevs: ;sub_425ah:
  call 0f255h   ;425a
  ld hl,0f1f7h    ;425d
  ld c,005h   ;4260
l4262h:
  ld b,004h   ;4262
  call CompFCB ;sub_424fh    ;4264
  jr nz,l4298h    ;4267
  ld b,004h   ;4269
l426bh:
  ld a,(de)     ;426b
  inc de      ;426c
  cp 020h  ;' ' ;426d
  jr nz,l42a3h    ;426f
  djnz l426bh   ;4271
  ld a,c      ;4273
  neg   ;4274
  ld (0f216h),a   ;4276
  ld hl,0f2b9h    ;4279
  ld de,0f20bh    ;427c
  ld bc,00004h    ;427f
  ldir    ;4282
  call ConvDate ;sub_5496h    ;4284
  ld (0f223h),bc    ;4287
  ld (0f221h),de    ;428b
  ld hl,0f20bh    ;428f
  push hl     ;4292
  pop iy    ;4293
  or 001h   ;4295
  ret     ;4297
l4298h:
  dec b     ;4298
  ld a,l      ;4299
  add a,b     ;429a
  ld l,a      ;429b
  ld a,h      ;429c
  adc a,000h    ;429d
  ld h,a      ;429f
  dec c     ;42a0
  jr nz,l4262h    ;42a1
l42a3h:
  scf     ;42a3
  ret     ;42a4

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Directory search (1st time)
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

Dir1st: ;sub_42a5h:
  push de     ;42a5
  ld hl,0000eh    ;42a6
  add hl,de     ;42a9
  ld (hl),000h    ;42aa
  call Dsearch ;sub_42b1h    ;42ac
  pop de      ;42af
  ret     ;42b0
;
Dsearch: ;sub_42b1h:
  call CheckFCB ;sub_440eh    ;42b1
  ret c     ;42b4
Search1st: ;sub_42b5h:
  call CheckDevs ;sub_425ah    ;42b5
  ret nc      ;42b8
  call DskChgCheck ;sub_44d3h    ;42b9
DirSearch: ;sub_42bch:
  call 0f258h   ;42bc
  call DirGet ;sub_430eh    ;42bf
  ret c     ;42c2
l42c3h:
  ld a,(hl)     ;42c3
  or a      ;42c4
  jr z,l42fch   ;42c5
  cp 0e5h   ;42c7
  jr z,l42fch   ;42c9
  push hl     ;42cb
  ld b,00bh   ;42cc
  ld de,0f2b9h    ;42ce
l42d1h:
  call CompStr ;l4252h   ;42d1
  jr z,l42dch   ;42d4
  cp 03fh   ;42d6
  jr nz,l42f5h    ;42d8
  djnz l42d1h   ;42da
l42dch:
  pop hl      ;42dc
  push hl     ;42dd
  pop iy    ;42de
  ld a,(0f2c4h)   ;42e0
  xor 080h    ;42e3
  bit 7,a   ;42e5
  ret z     ;42e7
  ld a,(iy+00bh)    ;42e8
  and 01eh    ;42eb
  ret z     ;42ed
  ld a,(0f2dch)   ;42ee
  or a      ;42f1
  ret nz      ;42f2
  jr l42f6h   ;42f3
l42f5h:
  pop hl      ;42f5
l42f6h:
  call NextDirEntry ;sub_4348h    ;42f6
  jr nc,l42c3h    ;42f9
  ret     ;42fb
l42fch:
  ld a,(0f2feh)   ;42fc
  inc a     ;42ff
  jr nz,l4308h    ;4300
  ld a,(0f2b8h)   ;4302
  ld (0f2feh),a   ;4305
l4308h:
  ld a,(hl)     ;4308
  or a      ;4309
  jr nz,l42f6h    ;430a
  scf     ;430c
  ret     ;430d

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

DirGet: ;sub_430eh:
  ld a,(0f2b8h)   ;430e
  inc a     ;4311
  cp (ix+00bh)    ;4312
  jr nc,l4367h    ;4315
GetDirectoryItem: ;sub_4317h:
  call 0f25bh   ;4317
  ld (0f2b8h),a   ;431a
  ld c,a      ;431d
  and (ix+004h)   ;431e
  ld l,a      ;4321
  ld h,000h   ;4322
  add hl,hl     ;4324
  add hl,hl     ;4325
  add hl,hl     ;4326
  add hl,hl     ;4327
  add hl,hl     ;4328
  ld de,(0f351h)    ;4329
  add hl,de     ;432d
  ld b,(ix+005h)    ;432e
l4331h:
  srl c   ;4331
  djnz l4331h   ;4333
  ld a,(0f245h)   ;4335
  cp c      ;4338
  jr nz,l4342h    ;4339
  ld a,(0f246h)   ;433b
  cp (ix+000h)    ;433e
  ret z     ;4341
l4342h:
  push hl     ;4342
  call DirWriteRead ;sub_46a4h    ;4343
  pop hl      ;4346
  ret     ;4347

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

NextDirEntry: ;sub_4348h:
  call 0f25eh   ;4348
  ld a,(0f2b8h)   ;434b
  inc a     ;434e
  cp (ix+00bh)    ;434f
  jr nc,l4367h    ;4352
  ld (0f2b8h),a   ;4354
  ld de,00020h    ;4357
  add hl,de     ;435a
  and (ix+004h)   ;435b
  ret nz      ;435e
  inc c     ;435f
  call DirWriteRead ;sub_46a4h    ;4360
  ld hl,(0f351h)    ;4363
  ret     ;4366
;
l4367h:
  call WriteDirChg ;sub_4743h    ;4367
  scf     ;436a
  ret     ;436b

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- delete file(s)
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_13: ;sub_436ch:
  call CheckFCB ;sub_440eh    ;436c
  call nc,Search1st ;sub_42b5h   ;436f
  ld a,0ffh   ;4372
  ret c     ;4374
  ret nz      ;4375
l4376h:
  ld a,0e5h   ;4376
  ld (0f23ch),a   ;4378
  ld (hl),a     ;437b
  ld l,(iy+01ah)    ;437c
  ld h,(iy+01bh)    ;437f
  ld a,h      ;4382
  or l      ;4383
  call nz,KillFatChain ;sub_4f9bh   ;4384
  call DirSearch ;sub_42bch    ;4387
  jr nc,l4376h    ;438a
  call DirWriteOK ;sub_4403h    ;438c
  jp CloseFatUpdate ;l45cfh   ;438f

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- rename file(s)
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_17: ;sub_4392h:
  call CheckFCB ;sub_440eh    ;4392
  jr c,RetErrorFF ;l440bh   ;4395
  ld de,00005h    ;4397
  add hl,de     ;439a
  ld de,0f2c5h    ;439b
  call 0f1f4h   ;439e
  call nc,Search1st ;sub_42b5h   ;43a1
  jr c,RetErrorFF ;l440bh   ;43a4
  jr nz,RetErrorFF ;l440bh    ;43a6
  ld hl,0f2b9h    ;43a8
  ld de,0f2d0h    ;43ab
  ld bc,0000ch    ;43ae
  ldir    ;43b1
l43b3h:
  ld hl,0f2c5h    ;43b3
  ld de,0f2b9h    ;43b6
  ld b,00bh   ;43b9
l43bbh:
  ld a,(hl)     ;43bb
  cp 03fh   ;43bc
  jr nz,l43c3h    ;43be
  ld a,(iy+000h)    ;43c0
l43c3h:
  ld (de),a     ;43c3
  inc hl      ;43c4
  inc de      ;43c5
  inc iy    ;43c6
  djnz l43bbh   ;43c8
  ld a,080h   ;43ca
  ld (de),a     ;43cc
  call CheckDevs ;sub_425ah    ;43cd
  jr nc,DirWriteER ;l4408h    ;43d0
  ld a,(0f2b8h)   ;43d2
  push af     ;43d5
  ld a,0ffh   ;43d6
  ld (0f2b8h),a   ;43d8
  call DirSearch ;sub_42bch    ;43db
  pop bc      ;43de
  jr nc,DirWriteER ;l4408h    ;43df
  ld a,b      ;43e1
  call GetDirectoryItem ;sub_4317h    ;43e2
  ex de,hl      ;43e5
  ld hl,0f2b9h    ;43e6
  ld bc,0000bh    ;43e9
  ldir    ;43ec
  ld a,0ffh   ;43ee
  ld (0f23ch),a   ;43f0
  ld hl,0f2d0h    ;43f3
  ld de,0f2b9h    ;43f6
  ld bc,0000ch    ;43f9
  ldir    ;43fc
  call DirSearch ;sub_42bch    ;43fe
  jr nc,l43b3h    ;4401
DirWriteOK: ;sub_4403h:
  call WriteDirChg ;sub_4743h    ;4403
  xor a     ;4406
  ret     ;4407
DirWriteER: ;l4408h:
  call WriteDirChg ;sub_4743h    ;4408
RetErrorFF: ;l440bh:
  ld a,0ffh   ;440b
  ret     ;440d

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Check FCB for correct name
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

CheckFCB: ;sub_440eh:
  call 0f261h   ;440e
  xor a     ;4411
  ld (0f2dch),a   ;4412
  ex de,hl      ;4415
  ld a,(hl)     ;4416
  inc hl      ;4417
  ld (0f2c4h),a   ;4418
  and 00fh    ;441b
  call SetWorkDisk ;sub_4427h    ;441d
  ret c     ;4420
  ld de,0f2b9h    ;4421
  jp 0f1f4h   ;4424

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; FCB's disk field processing
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

SetWorkDisk: ;sub_4427h:
  ld c,a      ;4427
  ld a,(0f347h)   ;4428
  cp c      ;442b
  ret c     ;442c
  ld a,c      ;442d
  dec a     ;442e
  jp p,l4435h   ;442f
  ld a,(0f247h)   ;4432
l4435h:
  ld (0f2e1h),a   ;4435
  ret     ;4438

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Check file size for OPEN
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

CheckSizes: ;sub_4439h:
  ld a,(iy+01fh)    ;4439
  or a      ;443c
  jr nz,l445eh    ;443d
  ld a,(iy+01ch)    ;443f
  ld c,(iy+01dh)    ;4442
  ld b,(iy+01eh)    ;4445
  add a,a     ;4448
  rl c    ;4449
  rl b    ;444b
  jr c,l445eh   ;444d
  or a      ;444f
  jr z,l4457h   ;4450
  inc bc      ;4452
  ld a,b      ;4453
  or c      ;4454
  jr z,l445eh   ;4455
l4457h:
  ld a,c      ;4457
  res 7,c   ;4458
  add a,a     ;445a
  rl b    ;445b
  ret nc      ;445d
l445eh:
  ld bc,0ff7fh    ;445e
  ret     ;4461

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- open file
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_0F: ;sub_4462h:
  call Dir1st ;sub_42a5h    ;4462
  jr c,RetErrorFF ;l440bh   ;4465
  call CheckSizes ;sub_4439h    ;4467
  ld a,(0f30ch)   ;446a
  inc b     ;446d
  cp b      ;446e
  jr nc,RetErrorFF ;l440bh    ;446f
l4471h:
  call 0f264h   ;4471
  ex de,hl      ;4474
  ld bc,0000fh    ;4475
  add hl,bc     ;4478
  call CheckSizes ;sub_4439h    ;4479
  ld a,(0f30ch)   ;447c
  cp b      ;447f
  jr z,l4488h   ;4480
  ld c,080h   ;4482
  jr c,l4488h   ;4484
  ld c,000h   ;4486
l4488h:
  ld (hl),c     ;4488
  inc hl      ;4489
  ex de,hl      ;448a
  ld bc,0001ch    ;448b
  add hl,bc     ;448e
  ld c,004h   ;448f
  ldir    ;4491
  ld bc,0fff8h    ;4493
  add hl,bc     ;4496
  ldi   ;4497
  ldi   ;4499
  ld c,0fch   ;449b
  add hl,bc     ;449d
  ldi   ;449e
  ldi   ;44a0
  ld a,(iy+00bh)    ;44a2
  bit 7,a   ;44a5
  jr nz,l44aeh    ;44a7
  ld a,(ix+000h)    ;44a9
  or 040h   ;44ac
l44aeh:
  ld (de),a     ;44ae
  inc de      ;44af
  ld a,(0f2b8h)   ;44b0
  ld (de),a     ;44b3
  inc de      ;44b4
  ld a,(iy+01ah)    ;44b5
  ld (de),a     ;44b8
  inc de      ;44b9
  inc de      ;44ba
  ld (de),a     ;44bb
  dec de      ;44bc
  ld a,(iy+01bh)    ;44bd
  ld (de),a     ;44c0
  inc de      ;44c1
  inc de      ;44c2
  ld (de),a     ;44c3
  inc de      ;44c4
  xor a     ;44c5
  ld (de),a     ;44c6
  inc de      ;44c7
  ld (de),a     ;44c8
  ret     ;44c9

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Disk error while DiskChange
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

@error: ;l44cah:
  ld c,a      ;44ca
  ld a,(0f2e1h)   ;44cb
  call CallErrorSub ;sub_470ah    ;44ce
  jr DoDiskChange ;l44dbh   ;44d1

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Check for disk change
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

DskChgCheck: ;sub_44d3h:
  ld a,0ffh   ;44d3
  ld (0f2b8h),a   ;44d5
  ld (0f2feh),a   ;44d8
DoDiskChange: ;l44dbh:
  call 0f267h   ;44db
  call DpbAdr ;sub_4553h    ;44de
  ld a,(0f2e1h)   ;44e1
  ld c,(ix+001h)    ;44e4
  ld b,000h   ;44e7
  or a      ;44e9
  call DiskChg_all ;sub_6086h    ;44ea
  jr c,@error ;l44cah   ;44ed
  call SetDPBAdr ;sub_4533h    ;44ef
  ld l,(ix+013h)    ;44f2
  ld h,(ix+014h)    ;44f5
  dec hl      ;44f8
  ld a,b      ;44f9
  or (hl)     ;44fa
  ld a,(0f2e1h)   ;44fb
  ld hl,(0f241h)    ;44fe
  jp m,l450ah   ;4501
  ret nz      ;4504
  cp l      ;4505
  jr nz,l4513h    ;4506
  dec h     ;4508
  ret z     ;4509
l450ah:
  sub l     ;450a
  jr nz,l4513h    ;450b
  ld l,a      ;450d
  ld h,a      ;450e
  dec l     ;450f
  ld (0f241h),hl    ;4510
l4513h:
  ld a,0ffh   ;4513
  ld (0f246h),a   ;4515
  jp l7555h   ;4518

  ds  0Bh   ;** SOLID: patch for correct addresses
;
;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Correct DPB table
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

DPB_change_entry: ;l4526h:
  ld b,(hl)     ;4526
  ld a,(0f2e1h)   ;4527
  ld c,(ix+001h)    ;452a
  push ix   ;452d
  pop hl      ;452f
  call SetDPB_all ;sub_608eh    ;4530
SetDPBAdr: ;sub_4533h:
  push hl     ;4533
  pop ix    ;4534
  ex de,hl      ;4536
  call GetDPB ;sub_4561h    ;4537
  ld (hl),e     ;453a
  inc hl      ;453b
  ld (hl),d     ;453c
  ret     ;453d

  ds  15h   ;** SOLID: Patch for addresses

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; IX -> DPB for drive
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

DpbAdr: ;sub_4553h:
  call 0f26ah   ;4553
  call GetDPB ;sub_4561h    ;4556
  ld a,(hl)     ;4559
  inc hl      ;455a
  ld h,(hl)     ;455b
  ld l,a      ;455c
  push hl     ;455d
  pop ix    ;455e
  ret     ;4560
;
GetDPB: ;sub_4561h:
  ld a,(0f2e1h)   ;4561
GetDPBptr: ;sub_4564h:
  ld hl,0f355h    ;4564
  add a,a     ;4567
  add a,l     ;4568
  ld l,a      ;4569
  ret nc      ;456a
  inc h     ;456b
  ret     ;456c
;
  ds  2
;

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- close file
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_10: ;sub_456fh:
  push de     ;456f
  pop iy    ;4570
  call CheckFCB ;sub_440eh    ;4572
  ld a,0ffh   ;4575
  ret c     ;4577
  ld a,(iy+018h)    ;4578
  and 0c0h    ;457b
  ld a,000h   ;457d
  ret nz      ;457f
  ld a,(0f2e1h)   ;4580
  ld hl,(0f241h)    ;4583
  cp l      ;4586
  call z,WriteChangedSect ;sub_472dh    ;4587
  call DpbAdr ;sub_4553h    ;458a
  ld a,(iy+019h)    ;458d
  call GetDirectoryItem ;sub_4317h    ;4590
  ld b,00bh   ;4593
  call CompFCB ;sub_424fh    ;4595
  jr nz,ResFATchanges ;l45eeh    ;4598
  push iy   ;459a
  pop de      ;459c
  ld c,00bh   ;459d
  add hl,bc     ;459f
  ex de,hl      ;45a0
  ld c,016h   ;45a1
  add hl,bc     ;45a3
  ldi   ;45a4
  ldi   ;45a6
  ld bc,0fffch    ;45a8
  add hl,bc     ;45ab
  ldi   ;45ac
  ldi   ;45ae
  ld bc,00004h    ;45b0
  add hl,bc     ;45b3
  ldi   ;45b4
  ldi   ;45b6
  ld bc,0fff4h    ;45b8
  add hl,bc     ;45bb
  ld bc,00004h    ;45bc
  ldir    ;45bf
  call WriteDir ;sub_4748h    ;45c1
DoUpdateFAT: ;sub_45c4h:
  ld l,(ix+013h)    ;45c4
  ld h,(ix+014h)    ;45c7
  dec hl      ;45ca
  ld a,(hl)     ;45cb
  cp 001h   ;45cc
  ret nz      ;45ce
CloseFatUpdate: ;l45cfh:
  call 0f26dh   ;45cf
  call NewUpdateFAT ;sub_74c9h    ;45d2
  xor a     ;45d5
  ret     ;45d6
;
  ds  17h   ;** SOLID: patch
;
;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Reset file change flag
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

ResFATchanges: ;l45eeh:
  ld l,(ix+013h)    ;45ee
  ld h,(ix+014h)    ;45f1
  dec hl      ;45f4
  ld (hl),000h    ;45f5
  ld a,0ffh   ;45f7
  ret     ;45f9

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Get FAT buffer parameters
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GetFATbuf: ;sub_45fah:
  ld a,(ix+00ah)    ;45fa
  ld l,(ix+013h)    ;45fd
  ld h,(ix+014h)    ;4600
  ld b,(ix+010h)    ;4603
  ld e,(ix+008h)    ;4606
  ld d,(ix+009h)    ;4609
  ret     ;460c

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Get directory buffer parms
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GetDirectParams: ;sub_460dh:
  add a,(ix+011h)   ;460d
  ld e,a      ;4610
  ld d,(ix+012h)    ;4611
  jr nc,l4617h    ;4614
  inc d     ;4616
l4617h:
  ld hl,(0f351h)    ;4617
  ld b,001h   ;461a
  ret     ;461c

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- create file
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_16: ;sub_461dh:
  push de     ;461d
  call CheckFCB ;sub_440eh    ;461e
  jr c,l464dh   ;4621
  inc hl      ;4623
  inc hl      ;4624
  ld (hl),000h    ;4625
  ld hl,0f2b9h    ;4627
  ld a,03fh   ;462a
  ld bc,0000bh    ;462c
  cpir    ;462f
  jr z,l464dh   ;4631
  call Search1st ;sub_42b5h    ;4633
  jr nc,l4651h    ;4636
  ld a,(0f2feh)   ;4638
  cp 0ffh   ;463b
  jr z,l464dh   ;463d
  call GetDirectoryItem ;sub_4317h    ;463f
  push hl     ;4642
  pop iy    ;4643
  jr l4669h   ;4645
l4647h:
  bit 7,(iy+00bh)   ;4647
  jr nz,l469dh    ;464b
l464dh:
  pop de      ;464d
  ld a,0ffh   ;464e
  ret     ;4650
l4651h:
  jr nz,l4647h    ;4651
  ld a,(0f30ch)   ;4653
  or a      ;4656
  jr nz,l469dh    ;4657
  ld l,(iy+01ah)    ;4659
  ld h,(iy+01bh)    ;465c
  ld a,h      ;465f
  or l      ;4660
  jr z,l4669h   ;4661
  call KillFatChain ;sub_4f9bh    ;4663
  call CloseFatUpdate ;l45cfh   ;4666
l4669h:
  push iy   ;4669
  pop de      ;466b
  ld hl,0f2b9h    ;466c
  ld bc,0000bh    ;466f
  ldir    ;4672
  ld a,(hl)     ;4674
  rla     ;4675
  ld a,000h   ;4676
  jr nc,l467ch    ;4678
  ld a,006h   ;467a
l467ch:
  ld (de),a     ;467c
  inc de      ;467d
  ex de,hl      ;467e
  ld b,00ah   ;467f
  xor a     ;4681
l4682h:
  ld (hl),a     ;4682
  inc hl      ;4683
  djnz l4682h   ;4684
  push hl     ;4686
  call ConvDate ;sub_5496h    ;4687
  pop hl      ;468a
  ld (hl),e     ;468b
  inc hl      ;468c
  ld (hl),d     ;468d
  inc hl      ;468e
  ld (hl),c     ;468f
  inc hl      ;4690
  ld (hl),b     ;4691
  inc hl      ;4692
  xor a     ;4693
  ld b,006h   ;4694
l4696h:
  ld (hl),a     ;4696
  inc hl      ;4697
  djnz l4696h   ;4698
  call WriteDir ;sub_4748h    ;469a
l469dh:
  push iy   ;469d
  pop hl      ;469f
  pop de      ;46a0
  jp l4471h   ;46a1

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Change DIR sector
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

DirWriteRead: ;sub_46a4h:
  push bc     ;46a4
  call WriteDirChg ;sub_4743h    ;46a5
  pop bc      ;46a8
  ld b,(ix+000h)    ;46a9
  ld (0f245h),bc    ;46ac
  push bc     ;46b0
  ld a,c      ;46b1
  call GetDirectParams ;sub_460dh    ;46b2
  call DOS_abs_read ;sub_46c5h    ;46b5
  pop bc      ;46b8
  ret     ;46b9

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- read sector(s)
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_2F:
  ld b,h      ;46ba
  ld a,l      ;46bb
  ld (0f2e1h),a   ;46bc
  call DpbAdr ;sub_4553h    ;46bf
  ld hl,(0f23dh)    ;46c2
DOS_abs_read: ;sub_46c5h:
  call 0f270h   ;46c5
  xor a     ;46c8
  ld (0f2ffh),a   ;46c9
  call rdSector ;sub_46d7h    ;46cc
  ret nc      ;46cf
  call ErrorProc ;sub_46e8h    ;46d0
  dec a     ;46d3
  jr z,DOS_abs_read ;sub_46c5h    ;46d4
  ret     ;46d6

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; read sector with DPB
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

rdSector: ;sub_46d7h:
  ld a,(ix+000h)    ;46d7
  ld c,(ix+001h)    ;46da
  push hl     ;46dd
  push de     ;46de
  push bc     ;46df
  call ReadSector_all ;sub_6070h    ;46e0
  pop de      ;46e3
  ld c,d      ;46e4
  pop de      ;46e5
  pop hl      ;46e6
  ret     ;46e7

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Disk error processing
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

ErrorProc: ;sub_46e8h:
  push af     ;46e8
  ld a,c      ;46e9
  sub b     ;46ea
  ld c,a      ;46eb
  push bc     ;46ec
  ld b,000h   ;46ed
  ex de,hl      ;46ef
  add hl,bc     ;46f0
  push hl     ;46f1
  push de     ;46f2
  ld e,(ix+002h)    ;46f3
  ld d,(ix+003h)    ;46f6
  call Mul_DE_BC ;sub_4916h    ;46f9
  pop hl      ;46fc
  pop de      ;46fd
  add hl,bc     ;46fe
  pop bc      ;46ff
  pop af      ;4700
  ld c,a      ;4701
  ld a,(0f2ffh)   ;4702
  or c      ;4705
  ld c,a      ;4706
  ld a,(ix+000h)    ;4707
CallErrorSub: ;sub_470ah:
  call 0f273h   ;470a
  push bc     ;470d
  push de     ;470e
  push hl     ;470f
  ld hl,(0f323h)    ;4710
  call 0f1e8h   ;4713
  ld a,c      ;4716
  pop hl      ;4717
  pop de      ;4718
  pop bc      ;4719
  cp 002h   ;471a
  ret nz      ;471c
  jp 0f1e2h   ;471d

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- write sector(s)
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_30:
  ld b,h      ;4720
  ld a,l      ;4721
  ld (0f2e1h),a   ;4722
  call DpbAdr ;sub_4553h    ;4725
  ld hl,(0f23dh)    ;4728
  jr DOS_Abs_write ;l4755h   ;472b
WriteChangedSect: ;sub_472dh:
  ld hl,0f242h    ;472d
  xor a     ;4730
  cp (hl)     ;4731
  ld (hl),a     ;4732
  ret z     ;4733
  ld ix,(0f243h)    ;4734
  ld hl,(0f34fh)    ;4738
  ld b,001h   ;473b
  ld de,(0f23fh)    ;473d
  jr DOS_Abs_write ;l4755h   ;4741

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Write dir buffer if changed
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

WriteDirChg: ;sub_4743h:
  ld a,(0f23ch)   ;4743
  or a      ;4746
  ret z     ;4747
WriteDir: ;sub_4748h:
  call 0f276h   ;4748
  xor a     ;474b
  ld (0f23ch),a   ;474c
  ld a,(0f245h)   ;474f
  call GetDirectParams ;sub_460dh    ;4752

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Write sector (use DPB)
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

DOS_Abs_write: ;l4755h:
  call 0f279h   ;4755
  ld a,001h   ;4758
  ld (0f2ffh),a   ;475a
  ld a,(ix+000h)    ;475d
  ld c,(ix+001h)    ;4760
  push hl     ;4763
  push de     ;4764
  push bc     ;4765
  call WriteSector_all ;sub_6073h    ;4766
  pop de      ;4769
  ld c,d      ;476a
  pop de      ;476b
  pop hl      ;476c
  ret nc      ;476d
  call ErrorProc ;sub_46e8h    ;476e
  dec a     ;4771
  jr z,DOS_Abs_write ;l4755h   ;4772
  ret     ;4774

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- CPM read
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_14:
  call CPM2DOS ;sub_4ef8h    ;4775
  call ReadRec ;sub_4b23h    ;4778
  jr _stepout ;l4783h   ;477b

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- CPM write
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_15:
  call CPM2DOS ;sub_4ef8h    ;477d
  call WriteRec ;sub_4ca3h    ;4780
_stepout: ;l4783h:
  call IncRecNo ;sub_486ah    ;4783
  jr SetCPM_RecNo ;l479ch   ;4786

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- CPM random I/O
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_21:
  call GetOffsetNR1 ;sub_4857h    ;4788
  call ReadRec ;sub_4b23h    ;478b
  jr BlockIO_end ;l4799h   ;478e
;
BlockIO_handler: ;l4790h:
  push iy   ;4790
  pop de      ;4792
BDOS_22:
  call GetOffsetNR1 ;sub_4857h    ;4793
  call WriteRec ;sub_4ca3h    ;4796
BlockIO_end: ;l4799h:
  call SetRecOffset ;sub_4844h    ;4799
SetCPM_RecNo: ;l479ch:
  ld a,l      ;479c
  and 07fh    ;479d
  ld (iy+020h),a    ;479f
  sla l   ;47a2
  rl h    ;47a4
  ld (iy+00ch),h    ;47a6
  rl e    ;47a9
  ld (iy+00eh),e    ;47ab
  ld a,(0f2deh)   ;47ae
  ret     ;47b1

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- DOS block read
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_27: ;sub_47b2h:
  xor a     ;47b2
  ld (0f306h),a   ;47b3
  call GetRecOffset ;sub_485ah    ;47b6
  call ReadRec ;sub_4b23h    ;47b9
  jr IncBlocks ;l47c8h   ;47bc

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- DOS block write
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_26: ;l47beh:
  xor a     ;47be
  ld (0f306h),a   ;47bf
  call GetRecOffset ;sub_485ah    ;47c2
  call WriteRec ;sub_4ca3h    ;47c5
IncBlocks: ;l47c8h:
  call IncRecNo ;sub_486ah    ;47c8
  call SetRecOffset ;sub_4844h    ;47cb
  ld l,c      ;47ce
  ld h,b      ;47cf
  ret     ;47d0

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- write w/zero fill
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_28:
  push de     ;47d1
  pop iy    ;47d2
  ld a,(iy+010h)    ;47d4
  ld c,(iy+011h)    ;47d7
  ld b,(iy+012h)    ;47da
  ld e,(iy+013h)    ;47dd
  add a,a     ;47e0
  rl c    ;47e1
  rl b    ;47e3
  rl e    ;47e5
  or a      ;47e7
  jr z,l47f0h   ;47e8
  inc bc      ;47ea
  ld a,b      ;47eb
  or c      ;47ec
  jr nz,l47f0h    ;47ed
  inc e     ;47ef
l47f0h:
  ld l,(iy+021h)    ;47f0
  ld h,(iy+022h)    ;47f3
  sbc hl,bc   ;47f6
  jr z,BlockIO_handler ;l4790h   ;47f8
  ld a,(iy+023h)    ;47fa
  sbc a,e     ;47fd
  jr c,BlockIO_handler ;l4790h   ;47fe
  push hl     ;4800
  call BlockIO_handler ;l4790h   ;4801
  pop de      ;4804
  or a      ;4805
  ret nz      ;4806
  ld hl,(0f23dh)    ;4807
  push hl     ;480a
  ld hl,(0f351h)    ;480b
  ld (0f23dh),hl    ;480e
  ld b,080h   ;4811
l4813h:
  ld (hl),a     ;4813
  inc hl      ;4814
  djnz l4813h   ;4815
  dec a     ;4817
  ld (0f246h),a   ;4818
  ld l,(iy+021h)    ;481b
  ld h,(iy+022h)    ;481e
  sbc hl,de   ;4821
  ld c,l      ;4823
  ld b,h      ;4824
  ex de,hl      ;4825
  ld d,000h   ;4826
  ld a,(iy+023h)    ;4828
  sbc a,d     ;482b
  ld e,a      ;482c
l482dh:
  push hl     ;482d
  ld hl,00001h    ;482e
  call WriteRec ;sub_4ca3h    ;4831
  call IncRecNo ;sub_486ah    ;4834
  ld c,l      ;4837
  ld b,h      ;4838
  pop hl      ;4839
  dec hl      ;483a
  ld a,h      ;483b
  or l      ;483c
  jr nz,l482dh    ;483d
  pop hl      ;483f
  ld (0f23dh),hl    ;4840
  ret     ;4843

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; put file offset to FCB
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

SetRecOffset: ;sub_4844h:
  ld a,(0f2deh)   ;4844
  ld (iy+021h),l    ;4847
  ld (iy+022h),h    ;484a
  ld (iy+023h),e    ;484d
  inc d     ;4850
  dec d     ;4851
  ret z     ;4852
  ld (iy+024h),d    ;4853
  ret     ;4856

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; get offset from FCB
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GetOffsetNR1: ;sub_4857h:
  ld hl,00001h    ;4857
GetRecOffset: ;sub_485ah:
  push de     ;485a
  pop iy    ;485b
  ld c,(iy+021h)    ;485d
  ld b,(iy+022h)    ;4860
  ld e,(iy+023h)    ;4863
  ld d,(iy+024h)    ;4866
  ret     ;4869

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Next record (inc LONG)
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

IncRecNo: ;sub_486ah:
  ret z     ;486a
  inc hl      ;486b
  ld a,h      ;486c
  or l      ;486d
  ret nz      ;486e
  inc de      ;486f
  ret     ;4870

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Block I/O error return
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

blioEr: ;l4871h:
  pop hl      ;4871
  ld l,c      ;4872
  ld h,b      ;4873
  ld a,001h   ;4874
  ld (0f2deh),a   ;4876
  xor a     ;4879
  ld c,a      ;487a
  ld b,a      ;487b
  ret     ;487c

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

sub_487dh:
  ld (0f2e8h),hl    ;487d
  ld (0f2e4h),bc    ;4880
  ld (0f2e6h),de    ;4884
  ld a,(iy+000h)    ;4888
  call SetWorkDisk ;sub_4427h    ;488b
  jr c,blioEr ;l4871h   ;488e
  ld de,00080h    ;4890
  ld a,(0f306h)   ;4893
  or a      ;4896
  jr nz,l48a8h    ;4897
  ld a,(iy+00eh)    ;4899
  ld d,(iy+00fh)    ;489c
  ld e,a      ;489f
  or d      ;48a0
  jr nz,l48a8h    ;48a1
  ld e,080h   ;48a3
  ld (iy+00eh),e    ;48a5
l48a8h:
  inc d     ;48a8
  dec d     ;48a9
  jr nz,l48b1h    ;48aa
  ld a,e      ;48ac
  cp 040h   ;48ad
  jr c,l48b5h   ;48af
l48b1h:
  xor a     ;48b1
  ld (0f2e7h),a   ;48b2
l48b5h:
  ld hl,(0f23dh)    ;48b5
  ld (0f2e2h),hl    ;48b8
  xor a     ;48bb
  ld (0f2deh),a   ;48bc
  ld (0f2dfh),a   ;48bf
  ld bc,(0f2e8h)    ;48c2
  call Mul_DE_BC ;sub_4916h    ;48c6
  ld a,(iy+018h)    ;48c9
  or a      ;48cc
  ret m     ;48cd
  push bc     ;48ce
  call DpbAdr ;sub_4553h    ;48cf
  ld bc,(0f2e4h)    ;48d2
  call Mul_DE_BC ;sub_4916h    ;48d6
  ld (0f2f4h),bc    ;48d9
  push bc     ;48dd
  ld bc,(0f2e6h)    ;48de
  call Mul32 ;sub_491ch    ;48e2
  ld (0f2f6h),bc    ;48e5
  ld h,b      ;48e9
  ld l,c      ;48ea
  pop bc      ;48eb
  ld e,(ix+002h)    ;48ec
  ld d,(ix+003h)    ;48ef
  call DIV_HLBC_DE ;sub_4932h    ;48f2
  ld (0f2f2h),hl    ;48f5
  ld (0f2eeh),bc    ;48f8
  ld a,(ix+006h)    ;48fc
  and c     ;48ff
  ld (0f2ddh),a   ;4900
  ld a,(ix+007h)    ;4903
l4906h:
  dec a     ;4906
  jr z,l490fh   ;4907
  srl b   ;4909
  rr c    ;490b
  jr l4906h   ;490d
l490fh:
  ld (0f2ech),bc    ;490f
  pop bc      ;4913
  xor a     ;4914
  ret     ;4915

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Multiply & Divide
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

Mul_DE_BC: ;sub_4916h:
  call 0f27ch   ;4916
  ld hl,00000h    ;4919
Mul32: ;sub_491ch:
  ld a,b      ;491c
  ld b,011h   ;491d
  jr l4928h   ;491f
l4921h:
  jr nc,l4924h    ;4921
  add hl,de     ;4923
l4924h:
  rr h    ;4924
  rr l    ;4926
l4928h:
  rra     ;4928
  rr c    ;4929
  djnz l4921h   ;492b
  ld b,a      ;492d
  ret     ;492e
DIV_BC_DE: ;sub_492fh:
  ld hl,00000h    ;492f
DIV_HLBC_DE: ;sub_4932h:
  call 0f27fh   ;4932
  ld a,b      ;4935
  ld b,010h   ;4936
  rl c    ;4938
  rla     ;493a
l493bh:
  rl l    ;493b
  rl h    ;493d
  jr c,l494eh   ;493f
  sbc hl,de   ;4941
  jr nc,l4946h    ;4943
  add hl,de     ;4945
l4946h:
  ccf     ;4946
l4947h:
  rl c    ;4947
  rla     ;4949
  djnz l493bh   ;494a
  ld b,a      ;494c
  ret     ;494d
;
l494eh:
  or a      ;494e
  sbc hl,de   ;494f
  jr l4947h   ;4951

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; from fileSize calc numSectors(BC) and lasts bytes(HL)
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

sub_4953h: 
  ld h,b      ;4953
  ld l,c      ;4954
  ld bc,(0f2f2h)    ;4955
  ld a,b      ;4959
  or c      ;495a
  ld e,a      ;495b
  ld d,a      ;495c
  jr z,l4972h   ;495d
  ld e,(ix+002h)    ;495f
  ld d,(ix+003h)    ;4962
  ex de,hl      ;4965
  sbc hl,bc   ;4966
  ex de,hl      ;4968
  sbc hl,de   ;4969
  jr nc,l4972h    ;496b
  add hl,de     ;496d
  ex de,hl      ;496e
  ld hl,00000h    ;496f
l4972h:
  ld (0f2f8h),de    ;4972
  ld c,l      ;4976
  ld b,h      ;4977
  ld e,(ix+002h)    ;4978
  ld d,(ix+003h)    ;497b
  call DIV_BC_DE ;sub_492fh    ;497e
  ld (0f2fah),hl    ;4981
  ld (0f2fch),bc    ;4984
  ret     ;4988

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

sub_4989h:
  call 0f282h   ;4989
  ld l,(iy+01ch)    ;498c
  ld h,(iy+01dh)    ;498f
  ld e,(iy+01eh)    ;4992
  ld d,(iy+01fh)    ;4995
  ld a,l      ;4998
  or h      ;4999
  jr z,l49cfh   ;499a
  push bc     ;499c
  ld a,c      ;499d
  sub e     ;499e
  ld c,a      ;499f
  ld a,b      ;49a0
  sbc a,d     ;49a1
  ld b,a      ;49a2
  jr nc,l49b0h    ;49a3
  pop bc      ;49a5
  ld de,00000h    ;49a6
  ld l,(iy+01ah)    ;49a9
  ld h,(iy+01bh)    ;49ac
  push af     ;49af
l49b0h:
  pop af      ;49b0

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

l49b1h:
  call 0f285h   ;49b1
  ld a,b      ;49b4
  or c      ;49b5
  ret z     ;49b6
  push de     ;49b7
  push hl     ;49b8
  call GETFAT ;sub_41f4h    ;49b9
  pop de      ;49bc
  call sub_7570h    ;49bd
  jr nc,l49cch    ;49c0
  nop     ;49c2
  nop     ;49c3
  nop     ;49c4
  nop     ;49c5
  nop     ;49c6
  pop de      ;49c7
  inc de      ;49c8
  dec bc      ;49c9
  jr l49b1h   ;49ca
l49cch:
  ex de,hl      ;49cc
  pop de      ;49cd
  ret     ;49ce
;
l49cfh:
  inc bc      ;49cf
  dec de      ;49d0
  ret     ;49d1

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

sub_49d2h:
  ld (0f2e0h),a   ;49d2
  ld hl,(0f2ech)    ;49d5
  ld a,(0f2ddh)   ;49d8
  call CluSec ;sub_4edbh    ;49db
  ex de,hl      ;49de
  call sub_75e3h    ;49df
  nop     ;49e2
  nop     ;49e3
  jr nz,l49f0h    ;49e4
  ld a,(0f2e1h)   ;49e6
  ld l,a      ;49e9
  ld a,(0f241h)   ;49ea
  cp l      ;49ed
  jr z,l4a1bh   ;49ee
l49f0h:
  push de     ;49f0
  push ix   ;49f1
  call WriteChangedSect ;sub_472dh    ;49f3
  pop ix    ;49f6
  pop de      ;49f8
  ld a,(0f2e0h)   ;49f9
  or a      ;49fc
  jr nz,l4a0dh    ;49fd
  dec a     ;49ff
  ld (0f241h),a   ;4a00
  ld hl,(0f34fh)    ;4a03
  ld b,001h   ;4a06
  push de     ;4a08
  call DOS_abs_read ;sub_46c5h    ;4a09
  pop de      ;4a0c
l4a0dh:
  ld (0f23fh),de    ;4a0d
  ld a,(0f2e1h)   ;4a11
  ld (0f241h),a   ;4a14
  ld (0f243h),ix    ;4a17
l4a1bh:
  ld a,001h   ;4a1b
  ld (0f2dfh),a   ;4a1d
  ld hl,(0f2e2h)    ;4a20
  push hl     ;4a23
  ld bc,(0f2f8h)    ;4a24
  add hl,bc     ;4a28
  ld (0f2e2h),hl    ;4a29
  ld hl,(0f34fh)    ;4a2c
  ld de,(0f2f2h)    ;4a2f
  add hl,de     ;4a33
  pop de      ;4a34
  ret     ;4a35

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

sub_4a36h:
  call 0f288h   ;4a36
  ld hl,(0f2f8h)    ;4a39
  ld a,h      ;4a3c
  or l      ;4a3d
  ret z     ;4a3e
  xor a     ;4a3f
  call sub_49d2h    ;4a40
  jp 0f1d9h   ;4a43

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

sub_4a46h:
  call 0f28bh   ;4a46
  ld hl,(0f2f8h)    ;4a49
  ld a,h      ;4a4c
  or l      ;4a4d
  ret z     ;4a4e
  ld hl,(0f2eeh)    ;4a4f
  inc hl      ;4a52
  ld (0f2eeh),hl    ;4a53
  xor a     ;4a56
  ex de,hl      ;4a57
  ld hl,(0f2f0h)    ;4a58
  sbc hl,de   ;4a5b
  rra     ;4a5d
  call sub_49d2h    ;4a5e
  ex de,hl      ;4a61
  call 0f1d9h   ;4a62
  ld a,001h   ;4a65
  ld (0f242h),a   ;4a67
  ret     ;4a6a

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

sub_4a6bh:
  ld hl,00000h    ;4a6b
  ld (0f2f2h),hl    ;4a6e
  ld hl,(0f2fah)    ;4a71
  ld (0f2f8h),hl    ;4a74
  ld a,h      ;4a77
  or l      ;4a78
  scf     ;4a79
  ret z     ;4a7a
sub_4a7bh:
  ld a,(0f2dfh)   ;4a7b
  or a      ;4a7e
  ret z     ;4a7f
  ld a,(0f2ddh)   ;4a80
  cp (ix+006h)    ;4a83
  jr c,l4aa2h   ;4a86
  ld hl,(0f2ech)    ;4a88
  call sub_7570h    ;4a8b
  ccf     ;4a8e
  ex de,hl      ;4a8f
  nop     ;4a90
  ret c     ;4a91
  ex de,hl      ;4a92
  call GETFAT ;sub_41f4h    ;4a93
  ld (0f2ech),hl    ;4a96
  ld hl,(0f2eah)    ;4a99
  inc hl      ;4a9c
  ld (0f2eah),hl    ;4a9d
  ld a,0ffh   ;4aa0
l4aa2h:
  inc a     ;4aa2
  ld (0f2ddh),a   ;4aa3
  or a      ;4aa6
  ret     ;4aa7
;
l4aa8h:
  ld a,(hl)     ;4aa8
  ldi   ;4aa9
  cp 00dh   ;4aab
  jr nz,l4ab1h    ;4aad
  ld (hl),00ah    ;4aaf
l4ab1h:
  cp 00ah   ;4ab1
  jr z,l4acah   ;4ab3
  ld a,b      ;4ab5
  or c      ;4ab6
  jr nz,l4aa8h    ;4ab7
l4ab9h:
  ld (0f300h),hl    ;4ab9
l4abch:
  ld (0f2e2h),de    ;4abc
  jp nz,l4be2h    ;4ac0
  res 6,(iy+018h)   ;4ac3
  jp l4be2h   ;4ac7
l4acah:
  call Char2CON ;sub_53a8h    ;4aca
  ld hl,00000h    ;4acd
  ld a,c      ;4ad0
  or b      ;4ad1
  jr nz,l4af9h    ;4ad2
  inc a     ;4ad4
  jr l4ab9h   ;4ad5
l4ad7h:
  ld de,(0f2e2h)    ;4ad7
  inc a     ;4adb
  jr z,l4af2h   ;4adc
  inc a     ;4ade
  jr nz,l4abch    ;4adf
l4ae1h:
  call BDOS_3 ;sub_546eh    ;4ae1
  ld (de),a     ;4ae4
  inc de      ;4ae5
  cp 01ah   ;4ae6
  jr z,l4abch   ;4ae8
  dec bc      ;4aea
  ld a,b      ;4aeb
  or c      ;4aec
  jr nz,l4ae1h    ;4aed
  inc a     ;4aef
  jr l4abch   ;4af0
l4af2h:
  ld hl,(0f300h)    ;4af2
  ld a,h      ;4af5
  or l      ;4af6
  jr nz,l4aa8h    ;4af7
l4af9h:
  ld hl,0007fh    ;4af9
  ld a,(0f4d9h)   ;4afc
  cp l      ;4aff
  jr z,l4b05h   ;4b00
  ld (0f4d9h),hl    ;4b02
l4b05h:
  push bc     ;4b05
  push de     ;4b06
  ld de,0f4d9h    ;4b07
  call BDOS_0A ;sub_50e0h    ;4b0a
  pop de      ;4b0d
  pop bc      ;4b0e
  ld hl,0f4dbh    ;4b0f
  ld a,(hl)     ;4b12
  cp 01ah   ;4b13
  jr nz,l4aa8h    ;4b15
  ld (de),a     ;4b17
  inc de      ;4b18
  ld a,00ah   ;4b19
  call Char2CON ;sub_53a8h    ;4b1b
  xor a     ;4b1e
  ld h,a      ;4b1f
  ld l,a      ;4b20
  jr l4ab9h   ;4b21

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; file READ handler
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

ReadRec: ;sub_4b23h:
  call sub_487dh    ;4b23
  jp m,l4ad7h   ;4b26
  ld l,(iy+010h)    ;4b29
  ld h,(iy+011h)    ;4b2c
  ld de,(0f2f4h)    ;4b2f
  or a      ;4b33
  sbc hl,de   ;4b34
  push hl     ;4b36
  ld l,(iy+012h)    ;4b37
  ld h,(iy+013h)    ;4b3a
  ld de,(0f2f6h)    ;4b3d
  sbc hl,de   ;4b41
  pop hl      ;4b43
  jp c,l4c97h   ;4b44
  jr nz,l4b56h    ;4b47
  ld a,h      ;4b49
  or l      ;4b4a
  jp z,l4c97h   ;4b4b
  push hl     ;4b4e
  sbc hl,bc   ;4b4f
  pop hl      ;4b51
  jr nc,l4b56h    ;4b52
  ld b,h      ;4b54
  ld c,l      ;4b55
l4b56h:
  call 0f28eh   ;4b56
  call sub_4953h    ;4b59  from fileSize calc numSectors(BC) and lasts bytes(HL)
  ld bc,(0f2ech)    ;4b5c
  call sub_4989h    ;4b60
  ld a,b      ;4b63
  or c      ;4b64
  jp nz,l4c97h    ;4b65
  ld (0f2ech),hl    ;4b68
  ld (0f2eah),de    ;4b6b
  call sub_4a36h    ;4b6f
  ld hl,(0f2fch)    ;4b72
  ld a,h      ;4b75
  or l      ;4b76
  jp z,l4bdch   ;4b77
  call sub_4a7bh    ;4b7a
  jr c,l4be2h   ;4b7d
  ld a,001h   ;4b7f
  ld (0f2dfh),a   ;4b81
  ld a,(0f2ddh)   ;4b84
  ld bc,(0f2fch)    ;4b87
  ld hl,(0f2ech)    ;4b8b
l4b8eh:
  push bc     ;4b8e
  call sub_4e48h    ;4b8f
  push bc     ;4b92
  push af     ;4b93
  ld b,a      ;4b94
  call DOS_abs_read ;sub_46c5h    ;4b95
  pop af      ;4b98
  ld c,a      ;4b99
  ld b,000h   ;4b9a
  jr c,l4bc1h   ;4b9c
  ld a,(0f242h)   ;4b9e
  or a      ;4ba1
  jr z,l4bc1h   ;4ba2
  push bc     ;4ba4
  ld c,(ix+002h)    ;4ba5
  ld b,(ix+003h)    ;4ba8
  push bc     ;4bab
  push hl     ;4bac
  ld hl,(0f23fh)    ;4bad
  sbc hl,de   ;4bb0
  ex de,hl      ;4bb2
  call Mul_DE_BC ;sub_4916h    ;4bb3
  pop hl      ;4bb6
  add hl,bc     ;4bb7
  pop bc      ;4bb8
  ex de,hl      ;4bb9
  ld hl,(0f34fh)    ;4bba
  call 0f1d9h   ;4bbd
  pop bc      ;4bc0
l4bc1h:
  pop de      ;4bc1
  pop hl      ;4bc2
  or a      ;4bc3
  sbc hl,bc   ;4bc4
  jr z,l4bdch   ;4bc6
  ld c,l      ;4bc8
  ld b,h      ;4bc9
  ex de,hl      ;4bca
  call sub_7570h    ;4bcb
  ex de,hl      ;4bce
  jr nc,l4be2h    ;4bcf
  ld hl,(0f2eah)    ;4bd1
  inc hl      ;4bd4
  ld (0f2eah),hl    ;4bd5
  xor a     ;4bd8
  ex de,hl      ;4bd9
  jr l4b8eh   ;4bda
l4bdch:
  call sub_4a6bh    ;4bdc
  call nc,sub_4a36h   ;4bdf
l4be2h:
  call 0f291h   ;4be2
  ld hl,(0f2e2h)    ;4be5
  ld de,(0f23dh)    ;4be8
  or a      ;4bec
  sbc hl,de   ;4bed
  ld c,l      ;4bef
  ld b,h      ;4bf0
  ld de,00080h    ;4bf1
  ld a,(0f306h)   ;4bf4
  or a      ;4bf7
  jr nz,l4c00h    ;4bf8
  ld e,(iy+00eh)    ;4bfa
  ld d,(iy+00fh)    ;4bfd
l4c00h:
  call DIV_BC_DE ;sub_492fh    ;4c00
  ld a,h      ;4c03
  or l      ;4c04
  jr z,l4c17h   ;4c05
  inc bc      ;4c07
  ex de,hl      ;4c08
  sbc hl,de   ;4c09
  ld de,(0f2e2h)    ;4c0b
l4c0fh:
  xor a     ;4c0f
  ld (de),a     ;4c10
  inc de      ;4c11
  dec hl      ;4c12
  ld a,h      ;4c13
  or l      ;4c14
  jr nz,l4c0fh    ;4c15
l4c17h:
  ld hl,(0f2e8h)    ;4c17
  sbc hl,bc   ;4c1a
  jr z,l4c22h   ;4c1c
  inc a     ;4c1e
  ld (0f2deh),a   ;4c1f
l4c22h:
  call 0f294h   ;4c22
  ld hl,(0f2ech)    ;4c25
  ld (iy+01ch),l    ;4c28
  ld (iy+01dh),h    ;4c2b
  ld hl,(0f2eah)    ;4c2e
  ld (iy+01eh),l    ;4c31
  ld (iy+01fh),h    ;4c34
l4c37h:
  ld hl,(0f2e4h)    ;4c37
  ld de,(0f2e6h)    ;4c3a
  ld a,b      ;4c3e
  or c      ;4c3f
  ret z     ;4c40
  dec bc      ;4c41
  add hl,bc     ;4c42
  inc bc      ;4c43
  ret nc      ;4c44
  inc de      ;4c45
  ret     ;4c46
l4c47h:
  ld hl,(0f23dh)    ;4c47
  or 040h   ;4c4a
  inc a     ;4c4c
  jr z,l4c73h   ;4c4d
  inc a     ;4c4f
  jr z,l4c63h   ;4c50
  inc a     ;4c52
l4c53h:
  jr z,l4c81h   ;4c53
  ld a,(hl)     ;4c55
  inc hl      ;4c56
  cp 01ah   ;4c57
  jr z,l4c81h   ;4c59
  call Char2PRN ;sub_5466h    ;4c5b
  dec bc      ;4c5e
l4c5fh:
  ld a,b      ;4c5f
  or c      ;4c60
  jr l4c53h   ;4c61
l4c63h:
  ld a,(hl)     ;4c63
l4c64h:
  inc hl      ;4c64
  call Char2AUX ;sub_5475h    ;4c65
  cp 01ah   ;4c68
  jr z,l4c81h   ;4c6a
  dec bc      ;4c6c
  ld a,b      ;4c6d
  or c      ;4c6e
  jr nz,l4c63h    ;4c6f
  jr l4c81h   ;4c71
l4c73h:
  ld a,(hl)     ;4c73
  inc hl      ;4c74
  cp 01ah   ;4c75
  jr z,l4c81h   ;4c77
  call Char2CON ;sub_53a8h    ;4c79
  dec bc      ;4c7c
  ld a,b      ;4c7d
  or c      ;4c7e
  jr nz,l4c73h    ;4c7f
l4c81h:
  ld bc,(0f2e8h)    ;4c81
  jr l4c37h   ;4c85
l4c87h:
  ld c,e      ;4c87
  ld b,d      ;4c88
  call l49b1h   ;4c89
  ld a,b      ;4c8c
  or c      ;4c8d
  jp z,l4d41h   ;4c8e
  call ResvFATchn ;sub_4f12h    ;4c91
  jp nc,l4d41h    ;4c94
l4c97h:
  call 0f297h   ;4c97
  xor a     ;4c9a
  ld c,a      ;4c9b
  ld b,a      ;4c9c
  inc a     ;4c9d
  ld (0f2deh),a   ;4c9e
  jr l4c37h   ;4ca1

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; file WRITE handler
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

WriteRec: ;sub_4ca3h:
  call sub_487dh    ;4ca3
  push af     ;4ca6
  push bc     ;4ca7
  call ConvDate ;sub_5496h    ;4ca8
  ld (iy+014h),c    ;4cab
  ld (iy+015h),b    ;4cae
  ld (iy+016h),e    ;4cb1
  ld (iy+017h),d    ;4cb4
  pop bc      ;4cb7
  pop af      ;4cb8
  jp m,l4c47h   ;4cb9
  res 6,(iy+018h)   ;4cbc
  push bc     ;4cc0
  call sub_4953h    ;4cc1  from fileSize calc numSectors(BC) and lasts bytes(HL)
  pop bc      ;4cc4
  ld hl,(0f2f4h)    ;4cc5
  ld de,(0f2f6h)    ;4cc8
  ld a,b      ;4ccc
  or c      ;4ccd
  jp z,l4dddh   ;4cce
  dec bc      ;4cd1
  add hl,bc     ;4cd2
  jr nc,l4cd6h    ;4cd3
  inc de      ;4cd5
l4cd6h:
  ld b,h      ;4cd6
  ld c,l      ;4cd7
  ex de,hl      ;4cd8
  ld e,(ix+002h)    ;4cd9
  ld d,(ix+003h)    ;4cdc
  call DIV_HLBC_DE ;sub_4932h    ;4cdf
  ld h,b      ;4ce2
  ld l,c      ;4ce3
  ld b,(ix+007h)    ;4ce4
  dec b     ;4ce7
  jr z,l4cf0h   ;4ce8
l4ceah:
  srl h   ;4cea
  rr l    ;4cec
  djnz l4ceah   ;4cee
l4cf0h:
  push hl     ;4cf0
  ld c,(iy+010h)    ;4cf1
  ld b,(iy+011h)    ;4cf4
  ld l,(iy+012h)    ;4cf7
  ld h,(iy+013h)    ;4cfa
  call DIV_HLBC_DE ;sub_4932h    ;4cfd
l4d00h:
  ld a,h      ;4d00
  or l      ;4d01
  jr z,l4d05h   ;4d02
  inc bc      ;4d04
l4d05h:
  call 0f29ah   ;4d05
  ld (0f2f0h),bc    ;4d08
  ld bc,(0f2ech)    ;4d0c
  call sub_4989h    ;4d10
  ld (0f2ech),hl    ;4d13
  ld (0f2eah),de    ;4d16
  ex (sp),hl      ;4d1a
  or a      ;4d1b
  sbc hl,de   ;4d1c
  ex de,hl      ;4d1e
  pop hl      ;4d1f
  jr z,l4d41h   ;4d20
  ld a,b      ;4d22
  or c      ;4d23
  jp z,l4c87h   ;4d24
  push bc     ;4d27
  ld c,e      ;4d28
  ld b,d      ;4d29
  call ResvFATchn ;sub_4f12h    ;4d2a
  pop bc      ;4d2d
  jp c,l4c97h   ;4d2e
  ld de,(0f2eah)    ;4d31
  inc de      ;4d35
  dec bc      ;4d36
  call l49b1h   ;4d37
  ld (0f2ech),hl    ;4d3a
  ld (0f2eah),de    ;4d3d
l4d41h:
  call sub_4a46h    ;4d41
  ld hl,(0f2fch)    ;4d44
  ld a,h      ;4d47
  or l      ;4d48
  jr z,l4d8ch   ;4d49
  ld de,(0f2eeh)    ;4d4b
  add hl,de     ;4d4f
  ld (0f2eeh),hl    ;4d50
  call sub_4a7bh    ;4d53
  ld a,001h   ;4d56
  ld (0f2dfh),a   ;4d58
  ld a,(0f2ddh)   ;4d5b
  ld hl,(0f2ech)    ;4d5e
sub_4d61h:
  ld bc,(0f2fch)    ;4d61
l4d65h:
  push bc     ;4d65
  call sub_4e48h    ;4d66
  push bc     ;4d69
  push af     ;4d6a
  ld b,a      ;4d6b
  call sub_75f2h    ;4d6c
  nop     ;4d6f
  nop     ;4d70
  nop     ;4d71
  nop     ;4d72
  call DOS_Abs_write ;l4755h   ;4d73
  pop af      ;4d76
  pop de      ;4d77
  pop hl      ;4d78
  ld c,a      ;4d79
  xor a     ;4d7a
  ld b,a      ;4d7b
  sbc hl,bc   ;4d7c
  jr z,l4d8ch   ;4d7e
  ld c,l      ;4d80
  ld b,h      ;4d81
  ld hl,(0f2eah)    ;4d82
  inc hl      ;4d85
  ld (0f2eah),hl    ;4d86
  ex de,hl      ;4d89
  jr l4d65h   ;4d8a
l4d8ch:
  call 0f29dh   ;4d8c
  call sub_4a6bh    ;4d8f
  call nc,sub_4a46h   ;4d92
  ld hl,(0f2e2h)    ;4d95
  ld de,(0f23dh)    ;4d98
  or a      ;4d9c
  sbc hl,de   ;4d9d
  ld de,(0f2f4h)    ;4d9f
  add hl,de     ;4da3
  ld de,(0f2f6h)    ;4da4
  jr nc,l4dabh    ;4da8
  inc de      ;4daa
l4dabh:
  ld (0f2f4h),hl    ;4dab
  ld (0f2f6h),de    ;4dae
  ld c,(iy+010h)    ;4db2
  ld b,(iy+011h)    ;4db5
  or a      ;4db8
  sbc hl,bc   ;4db9
  ld c,(iy+012h)    ;4dbb
  ld b,(iy+013h)    ;4dbe
  ex de,hl      ;4dc1
  sbc hl,bc   ;4dc2
  jr c,l4dd6h   ;4dc4
l4dc6h:
  push iy   ;4dc6
  pop hl      ;4dc8
  ld de,00010h    ;4dc9
  add hl,de     ;4dcc
  ex de,hl      ;4dcd
  ld hl,0f2f4h    ;4dce
  ld bc,00004h    ;4dd1
  ldir    ;4dd4
l4dd6h:
  ld bc,(0f2e8h)    ;4dd6
  jp l4c22h   ;4dda
l4dddh:
  ld a,h      ;4ddd
  or l      ;4dde
  or d      ;4ddf
  or e      ;4de0
  jr z,l4e32h   ;4de1
  ld bc,00001h    ;4de3
  sbc hl,bc   ;4de6
  ex de,hl      ;4de8
  dec bc      ;4de9
  sbc hl,bc   ;4dea
  ld b,d      ;4dec
  ld c,e      ;4ded
  ld e,(ix+002h)    ;4dee
  ld d,(ix+003h)    ;4df1
  call DIV_HLBC_DE ;sub_4932h    ;4df4
  ld a,(ix+007h)    ;4df7
l4dfah:
  dec a     ;4dfa
  jr z,l4e03h   ;4dfb
  srl b   ;4dfd
  rr c    ;4dff
  jr l4dfah   ;4e01
l4e03h:
  call sub_4989h    ;4e03
  ld a,b      ;4e06
  or c      ;4e07
  jr z,l4e26h   ;4e08
  call ResvFATchn ;sub_4f12h    ;4e0a
  jp c,l4c97h   ;4e0d
l4e10h:
  ld bc,00000h    ;4e10
  ld (0f2e8h),bc    ;4e13
  ld (0f2eah),bc    ;4e17
  ld l,(iy+01ah)    ;4e1b
  ld h,(iy+01bh)    ;4e1e
  ld (0f2ech),hl    ;4e21
  jr l4dc6h   ;4e24
l4e26h:
  ld bc,0ffffh    ;4e26
  call ResFatChain ;sub_4f9eh    ;4e29
l4e2ch:
  dec de      ;4e2c
  ld a,001h   ;4e2d
  ld (de),a     ;4e2f
  jr l4e10h   ;4e30
l4e32h:
  ld l,(iy+01ah)    ;4e32
  ld h,(iy+01bh)    ;4e35
  ld a,h      ;4e38
  or l      ;4e39
  jr z,l4e10h   ;4e3a
  xor a     ;4e3c
  ld (iy+01ah),a    ;4e3d
  ld (iy+01bh),a    ;4e40
  call KillFatChain ;sub_4f9bh    ;4e43
  jr l4e2ch   ;4e46

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

sub_4e48h:
  call 0f2a0h   ;4e48
  ld d,a      ;4e4b
  push hl     ;4e4c
  inc b     ;4e4d
  dec b     ;4e4e
  jr z,l4e53h   ;4e4f
  ld c,0ffh   ;4e51
l4e53h:
  ld e,c      ;4e53
  push de     ;4e54
  ld a,(ix+006h)    ;4e55
  ld (0f2ddh),a   ;4e58
  inc a     ;4e5b
  sub d     ;4e5c
  ld b,a      ;4e5d
l4e5eh:
  ld (0f2ech),hl    ;4e5e
  push hl     ;4e61
  call GETFAT ;sub_41f4h    ;4e62
  pop de      ;4e65
  ld a,c      ;4e66
  sub b     ;4e67
  ld c,a      ;4e68
  jr z,l4e78h   ;4e69
  ld b,(ix+006h)    ;4e6b
  jr c,l4ecah   ;4e6e
  inc b     ;4e70
  inc de      ;4e71
  ex de,hl      ;4e72
  sbc hl,de   ;4e73
  ex de,hl      ;4e75
  jr z,l4e5eh   ;4e76
l4e78h:
  pop de      ;4e78
  ex (sp),hl      ;4e79
  push hl     ;4e7a
  push de     ;4e7b
  ld a,e      ;4e7c
  sub c     ;4e7d
  ld e,a      ;4e7e
  ld d,000h   ;4e7f
  ld c,(ix+002h)    ;4e81
  ld b,(ix+003h)    ;4e84
  call Mul_DE_BC ;sub_4916h    ;4e87
  pop af      ;4e8a
  ld hl,(0f2e2h)    ;4e8b
  push hl     ;4e8e
  add hl,bc     ;4e8f
  ld (0f2e2h),hl    ;4e90
  pop bc      ;4e93
  pop hl      ;4e94
  push bc     ;4e95
  push de     ;4e96
  ex de,hl      ;4e97
  ld hl,(0f2ech)    ;4e98
  sbc hl,de   ;4e9b
  ld bc,(0f2eah)    ;4e9d
  add hl,bc     ;4ea1
  ld (0f2eah),hl    ;4ea2
  ex de,hl      ;4ea5
  call CluSec ;sub_4edbh    ;4ea6
  ex de,hl      ;4ea9
  pop bc      ;4eaa
  ld a,(0f241h)   ;4eab
  cp (ix+000h)    ;4eae
  ld a,c      ;4eb1
  scf     ;4eb2
  jr nz,l4ec7h    ;4eb3
  call sub_75e3h    ;4eb5
  ld a,c      ;4eb8
  nop     ;4eb9
  nop     ;4eba
  jr c,l4ec7h   ;4ebb
  ld h,b      ;4ebd
  ld l,c      ;4ebe
  add hl,de     ;4ebf
  dec hl      ;4ec0
  ld bc,(0f23fh)    ;4ec1
  sbc hl,bc   ;4ec5
l4ec7h:
  pop hl      ;4ec7
  pop bc      ;4ec8
  ret     ;4ec9
l4ecah:
  add a,b     ;4eca
  ld (0f2ddh),a   ;4ecb
  ld c,000h   ;4ece
  jr l4e78h   ;4ed0

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;    Get 6 bit value for copyright
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

Get6b: ;sub_4ed2h:
  call OldGetFAT ;sub_41fdh    ;4ed2
  ld a,l      ;4ed5
  add hl,hl     ;4ed6
  add hl,hl     ;4ed7
  and 03fh  ;'?'  ;4ed8
  ret     ;4eda

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Convert cluster to sector
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

CluSec: ;sub_4edbh:
  call 0f2a3h   ;4edb
  push bc     ;4ede
  ld b,(ix+007h)    ;4edf
  dec hl      ;4ee2
  dec hl      ;4ee3
  jp l75beh   ;4ee4
l4ee7h:
  sla l   ;4ee7
  rl h    ;4ee9
  djnz l4ee7h   ;4eeb
  or l      ;4eed
  ld l,a      ;4eee
  ld c,(ix+00ch)    ;4eef
  ld b,(ix+00dh)    ;4ef2
  add hl,bc     ;4ef5
  pop bc      ;4ef6
  ret     ;4ef7

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;   convert CPM recno to DOS format
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

CPM2DOS: ;sub_4ef8h:
  push de     ;4ef8
  pop iy    ;4ef9
  ld c,(iy+020h)    ;4efb
  ld b,(iy+00ch)    ;4efe
  ld e,(iy+00eh)    ;4f01
  ld d,000h   ;4f04
  sla c   ;4f06
  srl e   ;4f08
  rr b    ;4f0a
  rr c    ;4f0c
  ld hl,00001h    ;4f0e
  ret     ;4f11

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Reserve FAT chain
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

ResvFATchn: ;sub_4f12h:
  call 0f2a6h   ;4f12
  ld e,(ix+00eh)    ;4f15
  ld d,(ix+00fh)    ;4f18
  ld (0f302h),de    ;4f1b
  push hl     ;4f1f
l4f20h:
  push bc     ;4f20
  push hl     ;4f21
  ld d,h      ;4f22
  ld e,l      ;4f23
l4f24h:
  push de     ;4f24
  ex de,hl      ;4f25
  ld hl,(0f302h)    ;4f26
  dec hl      ;4f29
  or a      ;4f2a
  sbc hl,de   ;4f2b
  ex de,hl      ;4f2d
  pop de      ;4f2e
  jr nc,l4f46h    ;4f2f
  ld a,e      ;4f31
  or d      ;4f32
  jr nz,l4f4dh    ;4f33
  pop hl      ;4f35
  pop hl      ;4f36
  pop hl      ;4f37
  ld bc,0ffffh    ;4f38
  ld e,(ix+013h)    ;4f3b
  ld d,(ix+014h)    ;4f3e
  call FAT_write ;sub_7427h    ;4f41
  scf     ;4f44
  ret     ;4f45
l4f46h:
  inc hl      ;4f46
  call ResvFATentry ;sub_4f55h    ;4f47
  jp l4f24h   ;4f4a
l4f4dh:
  dec de      ;4f4d
  ex de,hl      ;4f4e
  call ResvFATentry ;sub_4f55h    ;4f4f
  ex de,hl      ;4f52
  jr l4f24h   ;4f53

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; reserve single FAT entry
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

ResvFATentry: ;sub_4f55h:
  push hl     ;4f55
  push de     ;4f56
  call GETFAT ;sub_41f4h    ;4f57
  pop de      ;4f5a
  pop hl      ;4f5b
  ret nz      ;4f5c
  pop bc      ;4f5d
  ld c,l      ;4f5e
  ld b,h      ;4f5f
  ex (sp),hl      ;4f60
  ld e,(ix+013h)    ;4f61
  ld d,(ix+014h)    ;4f64
  call FAT_write ;sub_7427h    ;4f67
  pop hl      ;4f6a
  pop bc      ;4f6b
  dec bc      ;4f6c
  ld a,b      ;4f6d
  or c      ;4f6e
  jr nz,l4f20h    ;4f6f
  ld bc,0ffffh    ;4f71
  call NewPutFAT ;sub_7430h    ;4f74
  dec de      ;4f77
  ld a,001h   ;4f78
  ld (de),a     ;4f7a
  pop hl      ;4f7b
  push hl     ;4f7c
  call FAT_read ;sub_740dh    ;4f7d
  pop bc      ;4f80
  ld a,c      ;4f81
  or b      ;4f82
  ret nz      ;4f83
  ld (iy+01ah),l    ;4f84
  ld (iy+01bh),h    ;4f87
  ret     ;4f8a
;
  ds  10h   ;** SOLID: corrected for multiFAT system
;
;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

KillFatChain: ;sub_4f9bh:
  ld bc,00000h    ;4f9b
ResFatChain: ;sub_4f9eh:
  call 0f2a9h   ;4f9e
  push hl     ;4fa1
  call GETFAT ;sub_41f4h    ;4fa2
  ex (sp),hl      ;4fa5
  call NewPutFAT ;sub_7430h    ;4fa6
  pop hl      ;4fa9
  ld a,h      ;4faa
  or l      ;4fab
  ret z     ;4fac
  call sub_7570h    ;4fad
  jr c,KillFatChain ;sub_4f9bh    ;4fb0
  ret     ;4fb2
  cp 0f8h   ;4fb3
  jr c,KillFatChain ;sub_4f9bh    ;4fb5
  ret     ;4fb7

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- search 1st entry
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_11: ;sub_4fb8h:
  call Dir1st ;sub_42a5h    ;4fb8
l4fbbh:
  jr c,l5000h   ;4fbb
  ld a,(0f2b8h)   ;4fbd
  jr z,l4fc4h   ;4fc0
  ld a,0ffh   ;4fc2
l4fc4h:
  ld (0f30bh),a   ;4fc4
  ld (0f309h),ix    ;4fc7
  ld de,(0f23dh)    ;4fcb
  ld a,(0f2e1h)   ;4fcf
  inc a     ;4fd2
  ld (de),a     ;4fd3
  inc de      ;4fd4
  ld a,(hl)     ;4fd5
  cp 005h   ;4fd6
  jr nz,l4fdch    ;4fd8
  ld (hl),0e5h    ;4fda
l4fdch:
  ld bc,00020h    ;4fdc
  call 0f1d9h   ;4fdf
  call CheckSizes ;sub_4439h    ;4fe2
  ld a,(0f30ch)   ;4fe5
  cp b      ;4fe8
  jr z,l4fefh   ;4fe9
  jr nc,l5000h    ;4feb
  ld c,080h   ;4fed
l4fefh:
  ld hl,(0f23dh)    ;4fef
  ld de,0000ch    ;4ff2
  add hl,de     ;4ff5
  ld b,(hl)     ;4ff6
  ld (hl),a     ;4ff7
  inc hl      ;4ff8
  ld (hl),b     ;4ff9
  inc hl      ;4ffa
  ld (hl),d     ;4ffb
  inc hl      ;4ffc
  ld (hl),c     ;4ffd
  xor a     ;4ffe
  ret     ;4fff
l5000h:
  ld a,0ffh   ;5000
  ld (0f30bh),a   ;5002
  ret     ;5005

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- search next entry
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_12: ;sub_5006h:
  call CheckFCB ;sub_440eh    ;5006
  jr c,l5000h   ;5009
  ld a,(0f30bh)   ;500b
  cp 0ffh   ;500e
  jr z,l5000h   ;5010
  ld (0f2b8h),a   ;5012
  ld ix,(0f309h)    ;5015
  call DirSearch ;sub_42bch    ;5019
  jr l4fbbh   ;501c

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- set file length
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_23:call  Dir1st ;sub_42a5h    ;501e
  ld a,0ffh   ;5021
  ret c     ;5023
  push de     ;5024
  pop ix    ;5025
  ld a,(iy+01ch)    ;5027
  ld c,(iy+01dh)    ;502a
  ld b,(iy+01eh)    ;502d
  ld e,(iy+01fh)    ;5030
  add a,a     ;5033
  rl c    ;5034
  rl b    ;5036
  rl e    ;5038
  or a      ;503a
  jr z,l5043h   ;503b
  inc bc      ;503d
  ld a,b      ;503e
  or c      ;503f
  jr nz,l5043h    ;5040
  inc e     ;5042
l5043h:
  ld (ix+021h),c    ;5043
  ld (ix+022h),b    ;5046
  ld (ix+023h),e    ;5049
  xor a     ;504c
  ret     ;504d

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- get login vector
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_18:
  ld a,(0f347h)   ;504e
  ld b,a      ;5051
  xor a     ;5052
l5053h:
  scf     ;5053
  rla     ;5054
  djnz l5053h   ;5055
  ret     ;5057

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- set DMA address
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_1A:
  ld (0f23dh),de    ;5058
  ret     ;505c

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- get misc params
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_1B: ;sub_505dh:
  xor a     ;505d
  ld (0f306h),a   ;505e
  ld a,e      ;5061
  call SetWorkDisk ;sub_4427h    ;5062
  ld a,0ffh   ;5065
  ret c     ;5067
  call DoDiskChange ;l44dbh   ;5068
  ld e,(ix+013h)    ;506b
  ld d,(ix+014h)    ;506e
  push de     ;5071
  pop iy    ;5072
  ld hl,00002h    ;5074
  ld b,h      ;5077
  ld c,h      ;5078
  ld e,(ix+00eh)    ;5079
  ld d,(ix+00fh)    ;507c
  dec de      ;507f
  push de     ;5080
l5081h:
  push de     ;5081
  push hl     ;5082
  call GETFAT ;sub_41f4h    ;5083
  pop hl      ;5086
  pop de      ;5087
  jr nz,l508bh    ;5088
  inc bc      ;508a
l508bh:
  inc hl      ;508b
  dec de      ;508c
  ld a,e      ;508d
  or d      ;508e
  jr nz,l5081h    ;508f
  ld h,b      ;5091
  ld l,c      ;5092
  pop de      ;5093
  ld a,(ix+006h)    ;5094
  inc a     ;5097
  ld c,(ix+002h)    ;5098
  ld b,(ix+003h)    ;509b
  ret     ;509e

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- resed disk system
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_0D:
  ld hl,00080h    ;509f
  ld (0f23dh),hl    ;50a2
  xor a     ;50a5
  ld (0f247h),a   ;50a6
  call WriteChangedSect ;sub_472dh    ;50a9
  ld hl,0f355h    ;50ac
  ld a,(0f347h)   ;50af
l50b2h:
  ld e,(hl)     ;50b2
  inc hl      ;50b3
  ld d,(hl)     ;50b4
  inc hl      ;50b5
  push hl     ;50b6
  push af     ;50b7
  push de     ;50b8
  pop ix    ;50b9
  call DoUpdateFAT ;sub_45c4h    ;50bb
  pop af      ;50be
  pop hl      ;50bf
  dec a     ;50c0
  jr nz,l50b2h    ;50c1
  ret     ;50c3

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- get default drive
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_19:
  ld a,(0f247h)   ;50c4
  ret     ;50c7

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- get record no
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_24:
  call CPM2DOS ;sub_4ef8h    ;50c8
  ld (iy+021h),l    ;50cb
  ld (iy+022h),h    ;50ce
  ld (iy+023h),e    ;50d1
  ret     ;50d4

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- set default drive
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_0E:
  ld a,(0f347h)   ;50d5
  cp e      ;50d8
  ret c     ;50d9
  ret z     ;50da
  ld hl,0f247h    ;50db
  ld (hl),e     ;50de
  ret     ;50df

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- get string
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_0A: ;sub_50e0h:
  push de     ;50e0
  ld a,(0f237h)   ;50e1
  ld (0f238h),a   ;50e4
  xor a     ;50e7
  ld (0f239h),a   ;50e8
  ld h,d      ;50eb
  ld l,e      ;50ec
  ld b,a      ;50ed
  ld c,(hl)     ;50ee
  inc hl      ;50ef
  ld d,a      ;50f0
  ld e,(hl)     ;50f1
  inc hl      ;50f2
  ld ix,0f459h    ;50f3
  ld a,e      ;50f7
  cp c      ;50f8
  jr nc,l5101h    ;50f9
  push hl     ;50fb
  add hl,de     ;50fc
  ld a,(hl)     ;50fd
  pop hl      ;50fe
  cp 00dh   ;50ff
l5101h:
  jr z,gs@6 ;l5104h   ;5101
  ld e,d      ;5103
gs@6: ;l5104h:
  call 0f2ach   ;5104
  call BDOS_8 ;sub_544eh    ;5107
l510ah:
  push hl     ;510a
  push bc     ;510b
  ld hl,gs@@tab ;l5374h    ;510c
  ld bc,00011h    ;510f
  cpir    ;5112
  add hl,bc     ;5114
  add hl,bc     ;5115
  add hl,bc     ;5116
  ld c,(hl)     ;5117
  inc hl      ;5118
  ld h,(hl)     ;5119
  ld l,c      ;511a
  pop bc      ;511b
  ex (sp),hl      ;511c
  ret     ;511d
;
gs@grph:
  call BDOS_8 ;sub_544eh    ;511e
  cp 040h   ;5121
  jr c,l510ah   ;5123
  cp 060h   ;5125
  jr nc,l510ah    ;5127
  push af     ;5129
  ld a,b      ;512a
  inc a     ;512b
  cp c      ;512c
  jr nc,l515eh    ;512d
  ld a,001h   ;512f
  ld (ix+000h),a    ;5131
  inc ix    ;5134
  inc b     ;5136
  call EchoPr ;sub_535dh    ;5137
  pop af      ;513a
gs@nc:
  push af     ;513b
  ld a,b      ;513c
  cp c      ;513d
  jr nc,l515eh    ;513e
  pop af      ;5140
  ld (ix+000h),a    ;5141
  inc ix    ;5144
  inc b     ;5146
  call EchoPr ;sub_535dh    ;5147
  ld a,(0f239h)   ;514a
  or a      ;514d
  jr nz,gs@6 ;l5104h    ;514e
  inc d     ;5150
  ld a,e      ;5151
  cp d      ;5152
  jr c,gs@6 ;l5104h   ;5153
  ld a,(hl)     ;5155
  dec a     ;5156
  inc hl      ;5157
  jr nz,gs@6 ;l5104h    ;5158
  inc d     ;515a
  inc hl      ;515b
  jr gs@6 ;l5104h   ;515c
l515eh:
  pop af      ;515e
  ld a,007h   ;515f
  call Char2CON ;sub_53a8h    ;5161
  jr gs@6 ;l5104h   ;5164
;
gs@up:
  pop de      ;5166
  ld a,(0f238h)   ;5167
  ld b,a      ;516a
  ld a,(0f237h)   ;516b
  sub b     ;516e
  jr z,l5177h   ;516f
  ld b,a      ;5171
l5172h:
  call DlLast ;sub_534fh    ;5172
  djnz l5172h   ;5175
l5177h:
  jp BDOS_0A ;sub_50e0h    ;5177
gs@lf: ;l517ah:
  ld a,b      ;517a
  ld (0f23ah),a   ;517b
  call NL@ ;sub_5183h    ;517e
l5181h:
  jr gs@6 ;l5104h   ;5181
NL@: ;sub_5183h:
  ld a,00dh   ;5183
  call Char2CON ;sub_53a8h    ;5185
  ld a,00ah   ;5188
  jp Char2CON ;sub_53a8h    ;518a
gs@cr:
  pop de      ;518d
sub_518eh:
  call Char2CON ;sub_53a8h    ;518e
  push de     ;5191
  inc de      ;5192
  ld a,b      ;5193
  ld (de),a     ;5194
  cp c      ;5195
  push af     ;5196
  inc de      ;5197
  ld c,b      ;5198
  xor a     ;5199
  ld b,a      ;519a
  or c      ;519b
  jr z,l51a3h   ;519c
  ld hl,0f459h    ;519e
  ldir    ;51a1
l51a3h:
  pop af      ;51a3
  jr z,l51a9h   ;51a4
  ld a,00dh   ;51a6
  ld (de),a     ;51a8
l51a9h:
  pop de      ;51a9
  ret     ;51aa
;
gs@bs:
  ld a,(0f23ah)   ;51ab
  and b     ;51ae
  cp 07fh   ;51af
  jp z,OutCopyRight ;l5244h   ;51b1
  inc b     ;51b4
  dec b     ;51b5
  jr z,l51dch   ;51b6
  dec b     ;51b8
  dec ix    ;51b9
  call DlLast ;sub_534fh    ;51bb
  inc b     ;51be
  dec b     ;51bf
  jr z,l51ceh   ;51c0
  dec b     ;51c2
  dec ix    ;51c3
  ld a,(ix+000h)    ;51c5
  dec a     ;51c8
  jr z,l51dch   ;51c9
  inc b     ;51cb
  inc ix    ;51cc
l51ceh:
  ld a,(ix+000h)    ;51ce
  cp 020h   ;51d1
  jr nc,l51dch    ;51d3
  cp 009h   ;51d5
  jr z,l51fbh   ;51d7
  call DlLast ;sub_534fh    ;51d9
l51dch:
  ld a,(0f239h)   ;51dc
  or a      ;51df
  jr nz,l5181h    ;51e0
  inc d     ;51e2
  dec d     ;51e3
  jr z,l5181h   ;51e4
  dec d     ;51e6
  ld a,d      ;51e7
  cp e      ;51e8
  jr nc,l5181h    ;51e9
  dec hl      ;51eb
  ld a,d      ;51ec
  cp 001h   ;51ed
  jr c,l5181h   ;51ef
  dec hl      ;51f1
  ld a,(hl)     ;51f2
  dec a     ;51f3
  inc hl      ;51f4
  jr nz,l5181h    ;51f5
  dec d     ;51f7
  dec hl      ;51f8
  jr l5181h   ;51f9
l51fbh:
  push hl     ;51fb
  push bc     ;51fc
  ld a,(0f238h)   ;51fd
  ld c,a      ;5200
  inc b     ;5201
  dec b     ;5202
  jr z,l521ah   ;5203
  ld hl,0f459h    ;5205
l5208h:
  ld a,(hl)     ;5208
  inc hl      ;5209
  cp 001h   ;520a
  jr z,l5218h   ;520c
  inc c     ;520e
  cp 020h   ;520f
  jr nc,l5218h    ;5211
  cp 009h   ;5213
  jr z,l522ah   ;5215
  inc c     ;5217
l5218h:
  djnz l5208h   ;5218
l521ah:
  ld a,(0f237h)   ;521a
  sub c     ;521d
  jr z,l5226h   ;521e
  ld b,a      ;5220
l5221h:
  call DlLast ;sub_534fh    ;5221
  djnz l5221h   ;5224
l5226h:
  pop bc      ;5226
  pop hl      ;5227
  jr l51dch   ;5228
l522ah:
  ld a,c      ;522a
  add a,007h    ;522b
  and 0f8h    ;522d
  ld c,a      ;522f
  jr l5218h   ;5230
gs@ins:
  ld a,(0f239h)   ;5232
  xor 001h    ;5235
  jr l523eh   ;5237
  xor a     ;5239
  jr l523eh   ;523a
  ld a,001h   ;523c
l523eh:
  ld (0f239h),a   ;523e
  jp gs@6 ;l5104h   ;5241

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; print copyright
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

OutCopyRight: ;l5244h:
  xor a     ;5244
  ld (0f23ah),a   ;5245
  push bc     ;5248
  ld b,010h   ;5249
  ld de,copyrite ;l547dh    ;524b
  ld hl,00000h    ;524e
l5251h:
  push hl     ;5251
  call Get6b ;sub_4ed2h    ;5252
  add a,020h    ;5255
  call Char2CON ;sub_53a8h    ;5257
  ld a,h      ;525a
  add a,020h    ;525b
  call Char2CON ;sub_53a8h    ;525d
  pop hl      ;5260
  inc hl      ;5261
  djnz l5251h   ;5262
  pop bc      ;5264
;
gs@home:
  ld a,08fh   ;5265
  pop de      ;5267
  call sub_518eh    ;5268
  call NL@ ;sub_5183h    ;526b
  ld a,(0f238h)   ;526e
  or a      ;5271
  jp z,BDOS_0A ;sub_50e0h    ;5272
  ld b,a      ;5275
  ld a,020h   ;5276
l5278h:
  call Char2CON ;sub_53a8h    ;5278
  djnz l5278h   ;527b
  jp BDOS_0A ;sub_50e0h    ;527d
;
gs@dwn:
  ld a,0ffh   ;5280
  jr l52b5h   ;5282
;
gs@cls:
  call sub_52e3h    ;5284
  jp c,gs@6 ;l5104h   ;5287
  push bc     ;528a
  ld c,a      ;528b
  ld b,000h   ;528c
  add hl,bc     ;528e
  pop bc      ;528f
  add a,d     ;5290
  ld d,a      ;5291
  jp gs@6 ;l5104h   ;5292
;
gs@select:
  call sub_52e3h    ;5295
  jp c,gs@6 ;l5104h   ;5298
  jr l52b5h   ;529b
;
gs@del:
  ld a,d      ;529d
  cp e      ;529e
  jp nc,gs@6 ;l5104h    ;529f
  inc d     ;52a2
  ld a,(hl)     ;52a3
  dec a     ;52a4
  inc hl      ;52a5
  jp nz,gs@6 ;l5104h    ;52a6
  inc d     ;52a9
  inc hl      ;52aa
  jp gs@6 ;l5104h   ;52ab
;
gs@right:
  ld a,(hl)     ;52ae
  dec a     ;52af
  ld a,001h   ;52b0
  jr nz,l52b5h    ;52b2
  inc a     ;52b4
l52b5h:
  push af     ;52b5
  xor a     ;52b6
  ld (0f239h),a   ;52b7
  ld a,b      ;52ba
  cp c      ;52bb
  jr nc,l52dfh    ;52bc
  ld a,d      ;52be
  cp e      ;52bf
  jr nc,l52dfh    ;52c0
  ld a,(hl)     ;52c2
  cp 001h   ;52c3
  jr nz,l52cdh    ;52c5
  ld a,b      ;52c7
  inc a     ;52c8
  cp c      ;52c9
  jr nc,l52dfh    ;52ca
  ld a,(hl)     ;52cc
l52cdh:
  inc hl      ;52cd
  ld (ix+000h),a    ;52ce
  inc ix    ;52d1
  call EchoPr ;sub_535dh    ;52d3
  inc b     ;52d6
  inc d     ;52d7
  pop af      ;52d8
  dec a     ;52d9
  jr nz,l52b5h    ;52da
  jp gs@6 ;l5104h   ;52dc
;
l52dfh:
  pop af      ;52df
  jp gs@6 ;l5104h   ;52e0

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

sub_52e3h:
  call BDOS_8 ;sub_544eh    ;52e3
  cp 001h   ;52e6
  jr nz,l531fh    ;52e8
  call BDOS_8 ;sub_544eh    ;52ea
  cp 040h  ;'@' ;52ed
  jr c,l531fh   ;52ef
  cp 060h  ;'`' ;52f1
  jr nc,l531fh    ;52f3
  push hl     ;52f5
  push de     ;52f6
  push bc     ;52f7
  ld iy,00000h    ;52f8
l52fch:
  scf     ;52fc
  push af     ;52fd
  ld a,001h   ;52fe
  call l531fh   ;5300
  jr c,l531ah   ;5303
  ld c,a      ;5305
  ld b,000h   ;5306
  add hl,bc     ;5308
  add a,d     ;5309
  ld d,a      ;530a
  push iy   ;530b
  pop af      ;530d
  add a,c     ;530e
  push af     ;530f
  pop iy    ;5310
  inc hl      ;5312
  pop af      ;5313
  cp (hl)     ;5314
  dec hl      ;5315
  jr nz,l52fch    ;5316
  push iy   ;5318
l531ah:
  pop af      ;531a
  pop bc      ;531b
  pop de      ;531c
  pop hl      ;531d
  ret     ;531e

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

l531fh:
  push bc     ;531f
  push af     ;5320
  ld a,e      ;5321
  sub d     ;5322
  jr c,l534bh   ;5323
  jr z,l534bh   ;5325
  dec a     ;5327
  jr z,l534bh   ;5328
  ld c,a      ;532a
  ld b,000h   ;532b
  pop af      ;532d
  push hl     ;532e
  push af     ;532f
  ld a,(hl)     ;5330
  dec a     ;5331
  jr nz,l5336h    ;5332
  inc hl      ;5334
  dec c     ;5335
l5336h:
  pop af      ;5336
  inc c     ;5337
  dec c     ;5338
  jr nz,l533fh    ;5339
  pop hl      ;533b
  pop bc      ;533c
  scf     ;533d
  ret     ;533e
l533fh:
  inc hl      ;533f
  cpir    ;5340
  pop hl      ;5342
  jr nz,l534ch    ;5343
  ld a,e      ;5345
  sub d     ;5346
  dec a     ;5347
  sub c     ;5348
  pop bc      ;5349
  ret     ;534a
l534bh:
  pop af      ;534b
l534ch:
  pop bc      ;534c
  scf     ;534d
  ret     ;534e

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Delete char on screen
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

DlLast: ;sub_534fh:
  ld a,008h   ;534f
  call Char2CON ;sub_53a8h    ;5351
  ld a,020h   ;5354
  call Char2CON ;sub_53a8h    ;5356
  ld a,008h   ;5359
  jr Char2CON ;sub_53a8h    ;535b

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; echo printing
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

EchoPr: ;sub_535dh:
  cp 020h   ;535d
  jr nc,Char2CON ;sub_53a8h   ;535f
  cp 009h   ;5361
  jr z,Char2CON ;sub_53a8h    ;5363
  cp 001h   ;5365
  jr z,Char2CON ;sub_53a8h    ;5367
  push af     ;5369
  ld a,05eh   ;536a
  call Char2CON ;sub_53a8h    ;536c
  pop af      ;536f
  or 040h   ;5370
  jr Char2CON ;sub_53a8h    ;5372

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Table for BDOS 0Ah
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

gs@@tab:db  6,7Fh,8,0Dh,0Ah,15h,0Bh,0Ch,1Bh,12h,18h,1Ch,1Dh,1Eh,1Fh,1,8
  dw  gs@nc
  dw  gs@grph
  dw  gs@dwn
  dw  gs@up
  dw  gs@bs
  dw  gs@right
  dw  gs@select
  dw  gs@ins
  dw  gs@up
  dw  gs@cls
  dw  gs@home
  dw  gs@up
  dw  gs@lf
  dw  gs@cr
  dw  gs@bs
  dw  gs@del
  dw  gs@6

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_2:
  ld a,e      ;53a7
Char2CON: ;sub_53a8h:
  call 0f2afh   ;53a8
  cp 00bh   ;53ab
  jr z,pc_home ;l53e8h   ;53ad
  cp 00ch   ;53af
  jr z,pc_home ;l53e8h   ;53b1
  cp 01ch   ;53b3
  jr z,pc_right ;l53d5h   ;53b5
  cp 01dh   ;53b7
  jr z,pc_bs ;l53f0h   ;53b9
  cp 00dh   ;53bb
  jr z,pc_home ;l53e8h   ;53bd
  cp 008h   ;53bf
  jr z,pc_bs ;l53f0h   ;53c1
  cp 009h   ;53c3
  jr z,pc_tab ;l53f8h   ;53c5
  cp 07fh   ;53c7
  jr z,pc_bs ;l53f0h   ;53c9
  cp 020h   ;53cb
  jr c,pc_right ;l53d5h   ;53cd
  push hl     ;53cf
  ld hl,0f237h    ;53d0
  inc (hl)      ;53d3
  pop hl      ;53d4
pc_right: ;l53d5h:
  push bc     ;53d5
  ld b,a      ;53d6
  call Check4print ;sub_5412h    ;53d7
  ld a,b      ;53da
  call PutChar ;sub_408fh    ;53db
  ld a,(0f23bh)   ;53de
  or a      ;53e1
  ld a,b      ;53e2
  pop bc      ;53e3
  ret z     ;53e4
  jp PrintChar ;l409bh   ;53e5
;
pc_home: ;l53e8h:
  push af     ;53e8
  xor a     ;53e9
  ld (0f237h),a   ;53ea
  pop af      ;53ed
  jr pc_right ;l53d5h   ;53ee
pc_bs: ;l53f0h:
  push hl     ;53f0
  ld hl,0f237h    ;53f1
  dec (hl)      ;53f4
  pop hl      ;53f5
  jr pc_right ;l53d5h   ;53f6
;
pc_tab: ;l53f8h:
  ld a,020h   ;53f8
  call Char2CON ;sub_53a8h    ;53fa
  ld a,(0f237h)   ;53fd
  and 007h    ;5400
  jr nz,pc_tab ;l53f8h    ;5402
  ret     ;5404
;
l5405h:
  cp 010h   ;5405
  jr z,GetcCheck ;l541dh   ;5407
  cp 00eh   ;5409
  jr z,GetcCheck ;l541dh   ;540b
  cp 003h   ;540d
  jr z,GetcCheck ;l541dh   ;540f
  ret     ;5411

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Check CTRL-P, CTRL-N
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

Check4print: ;sub_5412h:
  call SenseCtrlC ;sub_4034h    ;5412
  ret z     ;5415
  cp 013h   ;5416
  jr nz,l5405h    ;5418
  call CharAvail ;sub_4078h    ;541a
GetcCheck: ;l541dh:
  call CharAvail ;sub_4078h    ;541d
  cp 010h   ;5420
  jr z,l5431h   ;5422
  cp 00eh   ;5424
  jr z,l5437h   ;5426
  cp 003h   ;5428
  ret nz      ;542a
  ld hl,(0f325h)    ;542b
  jp 0f1e8h   ;542e
l5431h:
  ld a,001h   ;5431
  ld (0f23bh),a   ;5433
  ret     ;5436
l5437h:
  xor a     ;5437
  ld (0f23bh),a   ;5438
  ret     ;543b

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- Get keyboard status
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_0B:
  call Check4print ;sub_5412h    ;543c
  ld a,000h   ;543f
  ret z     ;5441
  or 0ffh   ;5442
  ret     ;5444

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- get char w/echo
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_1:
  call BDOS_8 ;sub_544eh    ;5445
  push af     ;5448
  call Char2CON ;sub_53a8h    ;5449
  pop af      ;544c
  ret     ;544d

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- get char
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_8: ;sub_544eh:
  call GetcCheck ;l541dh   ;544e
  jr z,BDOS_8 ;sub_544eh    ;5451
  ret     ;5453

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- get/put char
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_6:
  ld a,e      ;5454
  cp 0ffh   ;5455
  jp nz,PutChar ;sub_408fh   ;5457
  call SenseCtrlC ;sub_4034h    ;545a
  jp nz,CharAvail ;sub_4078h   ;545d
  xor a     ;5460
  ret     ;5461

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- get char/no control
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_7: jp  CharAvail ;sub_4078h    ;5462

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- print char
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_5:
  ld a,e      ;5465
Char2PRN: ;sub_5466h:
  push af     ;5466
  call Check4print ;sub_5412h    ;5467
  pop af      ;546a
  jp PrintChar ;l409bh   ;546b

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- input AUX
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_3: ;sub_546eh:
  call Check4print ;sub_5412h    ;546e
  jp 0f371h   ;5471

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- output AUX
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_4:
  ld a,e      ;5474
Char2AUX: ;sub_5475h:
  push af     ;5475
  call Check4print ;sub_5412h    ;5476
  pop af      ;5479
  jp 0f374h   ;547a

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; My copyright (SOLID) - do not remove
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

copyrite:
  db  0EDh,8Ch,37h,0E4h,3Bh,03h,0C8h,98h,00h,51h,96h,4Dh,0C0h,0FCh
  db  0B2h,29h,39h,0BFh,26h,0Dh,0A4h,0EEh,0E8h,00h,0C9h

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Date conversion
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

ConvDate: ;sub_5496h:
  call 0f2b2h   ;5496
  call GetCurDate ;sub_54c0h    ;5499
  ld a,c      ;549c
  add a,a     ;549d
  add a,a     ;549e
  add a,a     ;549f
  rl b    ;54a0
  add a,a     ;54a2
  rl b    ;54a3
  add a,a     ;54a5
  rl b    ;54a6
  srl d   ;54a8
  or d      ;54aa
  ld e,a      ;54ab
  ld d,b      ;54ac
  ld bc,(0f249h)    ;54ad
  ld a,c      ;54b1
  add a,a     ;54b2
  add a,a     ;54b3
  add a,a     ;54b4
  add a,a     ;54b5
  add a,a     ;54b6
  rl b    ;54b7
  ld c,a      ;54b9
  ld a,(0f248h)   ;54ba
  or c      ;54bd
  ld c,a      ;54be
  ret     ;54bf

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Get date
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GetCurDate: ;sub_54c0h:
  call GetClockDate ;sub_4179h    ;54c0
  jr c,l550bh   ;54c3
  push de     ;54c5
  push hl     ;54c6
  ld de,(0f24ch)    ;54c7
  or a      ;54cb
  sbc hl,de   ;54cc
  pop hl      ;54ce
  pop de      ;54cf
  ret z     ;54d0
  ld (0f24ch),hl    ;54d1
  push bc     ;54d4
  push de     ;54d5
  ld c,l      ;54d6
  ld b,h      ;54d7
  ld de,005b5h    ;54d8
  call DIV_BC_DE ;sub_492fh    ;54db
  ld a,c      ;54de
  add a,a     ;54df
  add a,a     ;54e0
  add a,a     ;54e1
  ld b,000h   ;54e2
  ld de,T5534 ;l5534h    ;54e4
  call sub_5515h    ;54e7
  srl a   ;54ea
  jr nc,l54f2h    ;54ec
  ld de,000c8h    ;54ee
  add hl,de     ;54f1
l54f2h:
  call SetFebDays ;sub_5523h    ;54f2
  ld a,001h   ;54f5
  ld de,0f22bh    ;54f7
  call sub_5515h    ;54fa
  ld (0f249h),a   ;54fd
  inc l     ;5500
  ld a,l      ;5501
  ld (0f248h),a   ;5502
l5505h:
  call sub_5588h    ;5505
  pop de      ;5508
  pop bc      ;5509
  ret     ;550a
l550bh:
  push bc     ;550b
  push de     ;550c
  ld hl,(0f24ah)    ;550d
  call sub_559dh    ;5510
  jr l5505h   ;5513

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

sub_5515h:
  ex de,hl      ;5515
  ld c,(hl)     ;5516
  inc hl      ;5517
  ex de,hl      ;5518
  or a      ;5519
  sbc hl,bc   ;551a
  jr c,l5521h   ;551c
  inc a     ;551e
  jr sub_5515h    ;551f
l5521h:
  add hl,bc     ;5521
  ret     ;5522

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

SetFebDays: ;sub_5523h:
  call 0f2b5h   ;5523
  ld (0f24ah),a   ;5526
_febdays: ;sub_5529h:
  and 003h    ;5529
  ld a,01ch   ;552b
  jr nz,l5530h    ;552d
  inc a     ;552f
l5530h:
  ld (0f22ch),a   ;5530
  ret     ;5533

T5534:  db  0C8h,0A6h,0C8h,0A5h,0C8h,0A5h,0C8h,0A5h

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- get date
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_2A: ;sub_553ch:
  xor a     ;553c
  ld (0f306h),a   ;553d
  call GetCurDate ;sub_54c0h    ;5540
  ld hl,(0f24ah)    ;5543
  ld de,007bch    ;5546
  add hl,de     ;5549
  ld de,(0f248h)    ;554a
  ld a,(0f24eh)   ;554e
  ret     ;5551

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- set date
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_2B: ;sub_5552h:
  ld bc,0f844h    ;5552
  add hl,bc     ;5555
  jr nc,l559ah    ;5556
  ld a,h      ;5558
  or a      ;5559
  jr nz,l559ah    ;555a
  ld a,l      ;555c
  cp 078h   ;555d
  jr nc,l559ah    ;555f
  call _febdays ;sub_5529h    ;5561
  inc e     ;5564
  dec e     ;5565
  jr z,l559ah   ;5566
  ld a,d      ;5568
  or a      ;5569
  jr z,l559ah   ;556a
  cp 00dh   ;556c
  jr nc,l559ah    ;556e
  push hl     ;5570
  ld hl,0f22ah    ;5571
  add a,l     ;5574
  ld l,a      ;5575
  jr nc,l5579h    ;5576
  inc h     ;5578
l5579h:
  ld a,(hl)     ;5579
  pop hl      ;557a
  cp e      ;557b
  jr c,l559ah   ;557c
  ld (0f248h),de    ;557e
  call sub_559dh    ;5582
  call sub_4115h    ;5585
sub_5588h:
  ld bc,(0f24ch)    ;5588
  ld de,00007h    ;558c
  inc bc      ;558f
  inc bc      ;5590
  call DIV_BC_DE ;sub_492fh    ;5591
  ld a,l      ;5594
  ld (0f24eh),a   ;5595
  xor a     ;5598
  ret     ;5599
;
l559ah:
  ld a,0ffh   ;559a
  ret     ;559c

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

sub_559dh:
  ld a,l      ;559d
  call SetFebDays ;sub_5523h    ;559e
  ld c,l      ;55a1
  srl c   ;55a2
  srl c   ;55a4
  ld b,000h   ;55a6
  ld de,005b5h    ;55a8
  call Mul_DE_BC ;sub_4916h    ;55ab
  ld l,c      ;55ae
  ld h,b      ;55af
  ld a,(0f24ah)   ;55b0
  and 003h    ;55b3
  add a,a     ;55b5
  ld de,T5534 ;l5534h    ;55b6
  ld b,000h   ;55b9
  inc a     ;55bb
  call sub_55d2h    ;55bc
  ld de,0f22bh    ;55bf
  ld a,(0f249h)   ;55c2
  call sub_55d2h    ;55c5
  ld a,(0f248h)   ;55c8
  dec a     ;55cb
  ld c,a      ;55cc
  add hl,bc     ;55cd
  ld (0f24ch),hl    ;55ce
  ret     ;55d1

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

sub_55d2h:
  dec a     ;55d2
  ret z     ;55d3
  ex de,hl      ;55d4
  ld c,(hl)     ;55d5
  inc hl      ;55d6
  ex de,hl      ;55d7
  add hl,bc     ;55d8
  jr sub_55d2h    ;55d9

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- Get time
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_2C:
  xor a     ;55db
  ld (0f306h),a   ;55dc
  call GetCurDate ;sub_54c0h    ;55df
  ld h,b      ;55e2
  ld l,c      ;55e3
  xor a     ;55e4
  ret     ;55e5

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- set time
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_2D:
  ld b,h      ;55e6
  ld c,l      ;55e7
  ld a,b      ;55e8
  cp 018h   ;55e9
  jr nc,l559ah    ;55eb
  ld a,03bh   ;55ed
  cp c      ;55ef
  jr c,l559ah   ;55f0
  cp d      ;55f2
  jr c,l559ah   ;55f3
  ld a,e      ;55f5
  cp 064h   ;55f6
  jr nc,l559ah    ;55f8
  call SetCurDate ;sub_4130h    ;55fa
  xor a     ;55fd
  ret     ;55fe

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS -- set verify mode
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BDOS_2E:
  ld a,e      ;55ff
  ld (0f30dh),a   ;5600
  ret     ;5603

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Convert & check FCB (T.NORM)
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

ConvertFCB: ;l5604h:
  ld a,(hl)     ;5604
  cp 020h   ;5605
  scf     ;5607
  ret z     ;5608
  ld bc,00802h    ;5609
  cp 0e5h   ;560c
  jr nz,l5622h    ;560e
  ld a,005h   ;5610
  ld (de),a     ;5612
  inc hl      ;5613
  inc de      ;5614
  dec b     ;5615
  ld a,0e5h   ;5616
  call sub_5681h    ;5618
  jr nc,l5622h    ;561b
  ld a,(hl)     ;561d
  ld (de),a     ;561e
  inc hl      ;561f
  inc de      ;5620
  dec b     ;5621
l5622h:
  ld a,(hl)     ;5622
  call sub_5681h    ;5623
  jr nc,l5631h    ;5626
  ld (de),a     ;5628
  inc hl      ;5629
  inc de      ;562a
  dec b     ;562b
  scf     ;562c
  ret z     ;562d
  ld a,(hl)     ;562e
  jr l5667h   ;562f
;
l5631h:
  ld a,(0f30eh)   ;5631
  and a     ;5634
  ld a,(hl)     ;5635
  jr z,l564ch   ;5636
  cp 080h   ;5638
  jr c,l564ch   ;563a
  cp 0bah   ;563c
  jr nc,l564ch    ;563e
  push hl     ;5640
  push bc     ;5641
  ld c,a      ;5642
  ld b,000h   ;5643
  ld hl,OtherNameChars-80h ;;5645
  add hl,bc     ;5648
  ld a,(hl)     ;5649
  pop bc      ;564a
  pop hl      ;564b
l564ch:
  cp 061h  ;'a' ;564c
  jr c,l5656h   ;564e
  cp 07bh   ;5650
  jr nc,l5656h    ;5652
  sub 020h    ;5654
l5656h:
  cp 020h   ;5656
  ret c     ;5658
  push hl     ;5659
  push bc     ;565a
  ld hl,$bd_nam ;l5677h    ;565b
  ld bc,0000ah    ;565e
  cpir    ;5661
  pop bc      ;5663
  pop hl      ;5664
  scf     ;5665
  ret z     ;5666
l5667h:
  ld (de),a     ;5667
  inc hl      ;5668
  inc de      ;5669
  djnz l5622h   ;566a
  ld b,003h   ;566c
  dec c     ;566e
  jr nz,l5622h    ;566f
  or a      ;5671
  ld a,(hl)     ;5672
  ld (0f30ch),a   ;5673
  ret     ;5676
;
$bd_nam:   db  '."/[]:+=;,'

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

sub_5681h:
  push hl     ;5681
  ld hl,0f30fh    ;5682
  cp (hl)     ;5685
  ccf     ;5686
  jr nc,l5694h    ;5687
  inc hl      ;5689
  cp (hl)     ;568a
  jr c,l5694h   ;568b
  inc hl      ;568d
  cp (hl)     ;568e
  ccf     ;568f
  jr nc,l5694h    ;5690
  inc hl      ;5692
  cp (hl)     ;5693
l5694h:
  pop hl      ;5694
  ret     ;5695

OtherNameChars:
  db  80h,9Ah,'EA',8Eh,'A',8Fh,80h,'EEEIII',8Eh,8Fh,90h,92h,92h,'O'
  db  99h,'OUUY',99h,9Ah,9Bh,9Ch,9Dh,9Eh,9Fh,'AIOU',0A5h,0A5h,0A6h
  db  0A7h,0A8h,0A9h,0AAh,0ABh,0ACh,0ADh,0AEh,0AFh,0B0h,0B0h,0B2h
  db  0B2h,0B4h,0B4h,0B6h,0B6h,0B8h,0B8h

;ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
;ЫЫ                                                                          ЫЫ
;ЫЫ           From this point of Disk ROM any routines can be changed        ЫЫ
;ЫЫ           for matching OEM's requirements. No direct calls to this       ЫЫ
;ЫЫ           part of Disk ROM may be executed from external programs.       ЫЫ
;ЫЫ                                                                          ЫЫ
;ЫЫ           The part from now till next section "Low level routines"       ЫЫ
;ЫЫ           is used for initialization and BASIC statements handling.      ЫЫ
;ЫЫ                                                                          ЫЫ
;ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
;
;
;
BDOS_reserved: ;l56d0h:
  xor a     ;56d0
  ld b,a      ;56d1
  ret     ;56d2

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS call for BASIC BLOADs
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

Basic_F37D:
  ei      ;56d3
  ld a,001h   ;56d4
  ld (0f306h),a   ;56d6
  ld a,c      ;56d9
  cp 031h   ;56da
  jr nc,BDOS_reserved ;l56d0h    ;56dc
  sub 011h    ;56de
  jr nz,l56e6h    ;56e0
  ld (0f307h),de    ;56e2
l56e6h:
  dec a     ;56e6
  jr nz,l56edh    ;56e7
  ld de,(0f307h)    ;56e9
l56edh:
  push hl     ;56ed
  ld hl,$BdosRet ;l5700h    ;56ee
  ex (sp),hl      ;56f1
  push hl     ;56f2
  ld hl,$BdosTable ;l570dh    ;56f3
  ld b,000h   ;56f6
  add hl,bc     ;56f8
  add hl,bc     ;56f9
  ld b,(hl)     ;56fa
  inc hl      ;56fb
  ld h,(hl)     ;56fc
  ld l,b      ;56fd
  ex (sp),hl      ;56fe
  ret     ;56ff
;
;WWWWWWWWWWWWWWWWWWWWWWWWWW here indirect call is performed
;
$BdosRet: ;l5700h:
  push af     ;5700
  ld a,(0f306h)   ;5701
  or a      ;5704
  jr z,l570bh   ;5705
  pop af      ;5707
  ld l,a      ;5708
  ld h,b      ;5709
  ret     ;570a
;
l570bh:
  pop af      ;570b
  ret     ;570c

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BDOS routines vector
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

$BdosTable: ;l570dh:
  dw  GotoBasic
  dw  BDOS_1
  dw  BDOS_2
  dw  BDOS_3
  dw  BDOS_4
  dw  BDOS_5
  dw  BDOS_6
  dw  BDOS_7
  dw  BDOS_8
  dw  0F1C9h
  dw  BDOS_0A
  dw  BDOS_0B
  dw  BDOS_0C
  dw  BDOS_0D
  dw  BDOS_0E
  dw  BDOS_0F
  dw  BDOS_10
  dw  BDOS_11
  dw  BDOS_12
  dw  BDOS_13
  dw  BDOS_14
  dw  BDOS_15
  dw  BDOS_16
  dw  BDOS_17
  dw  BDOS_18
  dw  BDOS_19
  dw  BDOS_1A
  dw  BDOS_1B
  dw  BDOS_reserved
  dw  BDOS_reserved
  dw  BDOS_reserved
  dw  BDOS_reserved
  dw  BDOS_reserved
  dw  BDOS_21
  dw  BDOS_22
  dw  BDOS_23
  dw  BDOS_24
  dw  BDOS_reserved
  dw  BDOS_26
  dw  BDOS_27
  dw  BDOS_28
  dw  BDOS_reserved
  dw  BDOS_2A
  dw  BDOS_2B
  dw  BDOS_2C
  dw  BDOS_2D
  dw  BDOS_2E
  dw  BDOS_2F
  dw  BDOS_30

                        
;
; HDD ROM startup initializer
;
                        
HDD_ROM_Startup:
  ld a,006h   ;576f
  call 00141h   ;5771   ;Check for CTRL, if pressed, no HDD
  di      ;5774         ;boot performed!
  and 002h    ;5775
  ret z     ;5777
  call InitFileSystem ;sub_7876h    ;5778  ;HDD present ?
  ret c     ;577b       ;No -> exit
  ld a,(0fd99h)   ;577c
  and a     ;577f       ;SHIFT pressed
  ret m     ;5780
  jp nz,l5815h    ;5781 ;not first time initialized
  ld hl,0fb20h    ;5784
  bit 0,(hl)    ;5787
  jr nz,l5797h    ;5789
  set 0,(hl)    ;578b
  ld hl,0ffcah    ;578d
  ld b,00fh   ;5790
l5792h:
  ld (hl),0c9h    ;5792 ;clear EBIOS hooks
  inc hl      ;5794
  djnz l5792h   ;5795
l5797h:
  ld hl,(0fc48h)    ;5797
  ld de,0c001h    ;579a
  rst 20h     ;579d
  jr nc,l57ach    ;579e  ;out of memory
  ld a,006h   ;57a0
  call 00141h   ;57a2
  di      ;57a5
  rrca      ;57a6
  jr c,l57b2h   ;57a7
  ld a,007h   ;57a9     ;SHIFT pressed!
  rst 18h     ;57ab
l57ach:
  ld a,0ffh   ;57ac
  ld (0fd99h),a   ;57ae
  ret     ;57b1
l57b2h:
  ld hl,0f396h    ;57b2
  ld de,0f1c9h    ;57b5
  and a     ;57b8
  sbc hl,de   ;57b9
  call nc,_malloc ;sub_5f62h   ;57bb
  ret c     ;57be
  push hl     ;57bf
  ld hl,0fe49h    ;57c0
  ld bc,0f1c9h    ;57c3
l57c6h:
  xor a     ;57c6
  ld (bc),a     ;57c7
  inc bc      ;57c8
  inc hl      ;57c9
  ld a,l      ;57ca
  or h      ;57cb
  jr nz,l57c6h    ;57cc
  ld (0f6abh),hl    ;57ce
  ld b,014h   ;57d1
  ld hl,0fb21h    ;57d3
l57d6h:
  ld (hl),a     ;57d6
  inc hl      ;57d7
  djnz l57d6h   ;57d8
  ld hl,0f24fh    ;57da
  ld b,069h   ;57dd
l57dfh:
  ld (hl),0c9h    ;57df
  inc hl      ;57e1
  djnz l57dfh   ;57e2
  ld a,0dbh   ;57e4
  ld hl,0c9a8h    ;57e6
  ld (0f365h),a   ;57e9
  ld (0f366h),hl    ;57ec
  ld a,006h   ;57ef
  call 00141h   ;57f1
  and 002h    ;57f4
  ld (0f33fh),a   ;57f6
  ld a,007h   ;57f9
  rst 18h     ;57fb
  ld hl,hInit2 ;l5810h    ;57fc
  ld de,0fecbh    ;57ff
  ld bc,00005h    ;5802
  ldir    ;5805
  call sub_402dh    ;5807
  ld (0fecch),a   ;580a
  pop de      ;580d
  jr l583fh   ;580e
;
hInit2: ;l5810h:
  rst 30h     ;5810
  nop     ;5811
  dw  NextInit
  ret     ;5814
;
;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Not first DISK ROM
;
l5815h:
  ld hl,hInit2 ;l5810h    ;5815
  ld de,0fecbh    ;5818
  ld bc,00005h    ;581b
  ldir    ;581e
  call sub_402dh    ;5820
  ld (0fecch),a   ;5823
  ld hl,0fb21h    ;5826
  ld b,004h   ;5829
  xor a     ;582b
l582ch:
  add a,(hl)      ;582c
  jp c,NoMemry ;l5f49h   ;582d
  inc hl      ;5830
  inc hl      ;5831
  djnz l582ch   ;5832
  cp 008h   ;5834
  ret nc      ;5836
  ld hl,00016h    ;5837      ;allocate work buffer
  call _malloc ;sub_5f62h    ;583a
  ret c     ;583d
  ex de,hl      ;583e
l583fh:
  call GetWorkRAMAdr ;sub_6047h    ;583f
  ld (hl),e     ;5842
  inc hl      ;5843
  ld (hl),d     ;5844
  ld hl,(0f6abh)    ;5845
  ld de,00200h    ;5848
  rst 20h     ;584b
  jr nc,l5852h    ;584c
  ld (0f6abh),de    ;584e
l5852h:
  ld a,(0fb21h)   ;5852
  ld c,a      ;5855
  ld de,0fb23h    ;5856
  ld b,003h   ;5859
l585bh:
  ld a,(de)     ;585b
  and a     ;585c
  jr z,l5868h   ;585d
  add a,c     ;585f
  ld c,a      ;5860
  inc de      ;5861
  inc de      ;5862
  djnz l585bh   ;5863
  jp NoMemry ;l5f49h   ;5865
l5868h:
  ld a,(0f33fh)   ;5868
  and a     ;586b
  ld a,c      ;586c
  call GetHardDiskCount ;sub_78c1h    ;586d
  add a,l     ;5870
  cp 009h   ;5871
  ld a,l      ;5873
  jr c,l5879h   ;5874
  ld a,008h   ;5876
  sub c     ;5878
l5879h:
  ld (de),a     ;5879
  push af     ;587a
  inc de      ;587b
  call sub_402dh    ;587c
  ld (de),a     ;587f
  pop af      ;5880
  ld b,a      ;5881
  ld hl,0f359h    ;5882
l5885h:
  push bc     ;5885   ;copy some default DPBs for DOS2 to work properly
  push hl     ;5886
  ld hl,00015h    ;5887
  call AllocMem ;sub_5f45h    ;588a
  ex de,hl      ;588d
  pop hl      ;588e
  ld (hl),e     ;588f
  inc hl      ;5890
  ld (hl),d     ;5891
  inc hl      ;5892
  push hl     ;5893
  ld hl,DEFAULT_DPB-1 ;l77e6h    ;5894
  ld bc,00015h    ;5897
  ldir    ;589a
  pop hl      ;589c
  pop bc      ;589d
  djnz l5885h   ;589e
  ld hl,0fd99h    ;58a0
  inc (hl)      ;58a3
  xor a     ;58a4
  ret     ;58a5

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Final BIOS initialization
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

NextInit:
  ld hl,0fecbh    ;58a6
  ld b,005h   ;58a9
l58abh:
  ld (hl),0c9h    ;58ab
  inc hl      ;58ad
  djnz l58abh   ;58ae
  ld hl,0fd99h    ;58b0
  xor a     ;58b3
  cp (hl)     ;58b4
  ld (hl),a     ;58b5
  ret p     ;58b6
  call SetRuHook ;sub_623fh    ;58b7
  ld (0f348h),a   ;58ba
  ld hl,DiskHiRes ;l739fh    ;58bd
  ld de,0f1c9h    ;58c0
  ld bc,0006eh    ;58c3
  ldir    ;58c6
  ld hl,00034h    ;58c8
  ld de,0f30fh    ;58cb
  ld bc,00004h    ;58ce
  ldir    ;58d1
  ld a,(0002bh)   ;58d3
  rrca      ;58d6
  rrca      ;58d7
  rrca      ;58d8
  rrca      ;58d9
  and 007h    ;58da
  ld (0f30eh),a   ;58dc
  ld a,0ffh   ;58df
  ld (0f241h),a   ;58e1
  ld (0f246h),a   ;58e4
  ld (0f24dh),a   ;58e7
  ld a,00dh   ;58ea
  ld (0f55bh),a   ;58ec
  ld a,007h   ;58ef
  ld (0f345h),a   ;58f1
  ld hl,005b5h    ;58f4
  ld (0f33bh),hl    ;58f7
  ld b,008h   ;58fa
  ld hl,0f368h    ;58fc
l58ffh:
  ld (hl),0c3h    ;58ff
  inc hl      ;5901
  inc hl      ;5902
  inc hl      ;5903
  djnz l58ffh   ;5904
  ld hl,0fb21h    ;5906
  ld bc,00400h    ;5909
l590ch:
  ld a,(hl)     ;590c
  or a      ;590d
  jr z,l5916h   ;590e
  add a,c     ;5910
  ld c,a      ;5911
  inc hl      ;5912
  inc hl      ;5913
  djnz l590ch   ;5914
l5916h:
  ld a,c      ;5916
  or a      ;5917
  jr nz,l592fh    ;5918
  ld hl,0fb23h    ;591a
  ld de,0fb21h    ;591d
  ld bc,00006h    ;5920
  ldir    ;5923
  ld (hl),000h    ;5925
  ld hl,0fb21h    ;5927
  ld bc,00300h    ;592a
  jr l590ch   ;592d
l592fh:
  ld b,c      ;592f
  ld hl,0f355h    ;5930
l5933h:
  push bc     ;5933
  push hl     ;5934
  ld a,(hl)     ;5935
  inc hl      ;5936
  or (hl)     ;5937
  jr nz,l594eh    ;5938
  ld hl,00015h    ;593a
  call AllocMem ;sub_5f45h    ;593d
  ex de,hl      ;5940
  pop hl      ;5941
  push hl     ;5942
  ld (hl),e     ;5943
  inc hl      ;5944
  ld (hl),d     ;5945
  ld hl,DEFAULT_DPB-1 ;l77e6h    ;5946
  ld bc,00015h    ;5949
  ldir    ;594c
l594eh:
  pop hl      ;594e
  inc hl      ;594f
  inc hl      ;5950
  pop bc      ;5951
  djnz l5933h   ;5952
  ld hl,(0f6abh)    ;5954
  push hl     ;5957
  call AllocMem ;sub_5f45h    ;5958
  ld (0f34dh),hl    ;595b
  pop hl      ;595e
  push hl     ;595f
  call AllocMem ;sub_5f45h    ;5960
  ld (0f34fh),hl    ;5963
  pop hl      ;5966
  push hl     ;5967
  call AllocMem ;sub_5f45h    ;5968
  ld (0f351h),hl    ;596b
  pop hl      ;596e
  ld d,h      ;596f
  ld e,l      ;5970
  add hl,hl     ;5971
  add hl,de     ;5972
  inc hl      ;5973
  call AllocMem ;sub_5f45h    ;5974
  ld (0f349h),hl    ;5977
  inc hl      ;597a
  ld (0ffdbh),hl    ;597b
  ld hl,0fb21h    ;597e
  ld b,004h   ;5981
  xor a     ;5983
l5984h:
  add a,(hl)      ;5984
  jp c,NoMemry ;l5f49h   ;5985
  inc hl      ;5988
  inc hl      ;5989
  djnz l5984h   ;598a
  cp 009h   ;598c
  jp nc,NoMemry ;l5f49h    ;598e
  ld (0f347h),a   ;5991
  ld b,a      ;5994
  ld c,000h   ;5995
  ld hl,0f355h    ;5997
l599ah:
  ld e,(hl)     ;599a
  inc hl      ;599b
  ld d,(hl)     ;599c
  inc hl      ;599d
  push hl     ;599e
  push de     ;599f
  pop ix    ;59a0
  ld (ix+000h),c    ;59a2
  ld hl,(0ffdbh)    ;59a5
  ld (ix+013h),l    ;59a8
  ld (ix+014h),h    ;59ab
  inc c     ;59ae
  pop hl      ;59af
  djnz l599ah   ;59b0
  ld a,0ffh   ;59b2
  ld (0ffd9h),a   ;59b4
  ld hl,0f327h    ;59b7
  ld (hl),03eh    ;59ba
  inc hl      ;59bc
  ld (hl),01ah    ;59bd
  ld b,008h   ;59bf
l59c1h:
  inc hl      ;59c1
  ld (hl),0c9h    ;59c2
  djnz l59c1h   ;59c4
  ld hl,0f327h    ;59c6
  ld (0f372h),hl    ;59c9
  ld hl,0f32ch    ;59cc
  ld (0f375h),hl    ;59cf
  ld hl,0f331h    ;59d2
  ld (0f37eh),hl    ;59d5
  ld hl,07d2fh    ;59d8
  ld a,(0fcc1h)   ;59db
  call 0000ch   ;59de
  push af     ;59e1
  inc hl      ;59e2
  ld a,(0fcc1h)   ;59e3
  call 0000ch   ;59e6
  pop de      ;59e9
  ld h,a      ;59ea
  ld l,d      ;59eb
  push hl     ;59ec
  pop ix    ;59ed
  ld iy,(0fcc0h)    ;59ef
  call 0001ch   ;59f3
  call TestClock ;sub_40b8h    ;59f6
  call InitBasHooks ;sub_5cf5h    ;59f9
  ld a,(0fcc1h)   ;59fc
  ld (0f341h),a   ;59ff
  ld (0f342h),a   ;5a02
  call GetSlotP2 ;06012h   ;5a05
  ld (0f343h),a   ;5a08
  call GetSlotP3 ;sub_600fh    ;5a0b
  ld (0f344h),a   ;5a0e
  ld c,000h   ;5a11
  call TryFindRAM ;sub_5ecfh    ;5a13
  jr c,l5a1bh   ;5a16
  ld (0f341h),a   ;5a18
l5a1bh:
  ld c,040h   ;5a1b
  call TryFindRAM ;sub_5ecfh    ;5a1d
  jr c,l5a25h   ;5a20
  ld (0f342h),a   ;5a22
l5a25h:
  ld sp,0c200h    ;5a25
  ld a,(0fedah)   ;5a28
  cp 0c9h   ;5a2b
  jr z,l5a35h   ;5a2d
  ld ix,07d17h    ;5a2f
  jr BASCALL2 ;l5a47h   ;5a33
l5a35h:
  ld hl,0fcc9h    ;5a35
  ld b,040h   ;5a38
l5a3ah:
  ld a,(hl)     ;5a3a
  add a,a     ;5a3b
  jr c,l5a43h   ;5a3c
  inc hl      ;5a3e
  djnz l5a3ah   ;5a3f
  jr l5a4dh   ;5a41
l5a43h:
  ld ix,07e14h    ;5a43
BASCALL2: ;l5a47h:
  call InitBasicMem ;sub_5c9dh    ;5a47
  jp 00159h   ;5a4a

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; DOS boot sequence
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

l5a4dh:
  ld hl,HDD_RunDiskBasic ;l5bbbh    ;5a4d
  push hl     ;5a50
  call MasterBoot ;sub_78c4h    ;5a51
  ret c     ;5a54
  call DiskBootSequence ;sub_5b45h    ;5a55
  ret c     ;5a58
  call GoBootDisk ;sub_5b39h    ;5a59
  ld hl,(0fc48h)    ;5a5c
  ld de,08000h    ;5a5f
  rst 20h     ;5a62
  ret nz      ;5a63
  ld hl,0f341h    ;5a64
  ld a,(0fcc1h)   ;5a67
  cp (hl)     ;5a6a
  ret z     ;5a6b
  inc hl      ;5a6c
  cp (hl)     ;5a6d
  ret z     ;5a6e
l5a6fh:
  xor a     ;5a6f
  call ResetFATflgs ;sub_60b6h    ;5a70
  ld hl,(0f349h)    ;5a73
  ld (0f34bh),hl    ;5a76
  call DiskBootSequence ;sub_5b45h    ;5a79
  jp c,HDD_RunDiskBasic ;l5bbbh   ;5a7c
  ld (0f346h),a   ;5a7f
  ld a,(0f341h)   ;5a82
  ld h,000h   ;5a85
  call GetSlotMasks ;sub_64d1h    ;5a87
  scf     ;5a8a
  call p,SetPSLOT ;sub_64b1h    ;5a8b
  call c,SetSSLOT ;sub_64beh    ;5a8e
  xor a     ;5a91
  ld l,a      ;5a92
  ld h,a      ;5a93
l5a94h:
  ld (hl),a     ;5a94
  inc l     ;5a95
  jr nz,l5a94h    ;5a96
  ld bc,00026h    ;5a98
  call AllocDOS ;sub_5f2ah    ;5a9b
  ld (0f36fh),hl    ;5a9e
  ex de,hl      ;5aa1
  ld hl,XFERsub ;l6379h    ;5aa2
  ldir    ;5aa5
  ld bc,00019h    ;5aa7
  call AllocDOS ;sub_5f2ah    ;5aaa
  ld e,l      ;5aad
  ld d,h      ;5aae
  ld (0f369h),hl    ;5aaf
  inc hl      ;5ab2
  inc hl      ;5ab3
  ld (0f36ch),hl    ;5ab4
  ld hl,ONOFFsub ;l639fh    ;5ab7
  ldir    ;5aba
  ld bc,00177h    ;5abc
  call AllocDOS ;sub_5f2ah    ;5abf
  push hl     ;5ac2
  ex de,hl      ;5ac3
  ld hl,SLOTSsub ;l63f4h    ;5ac4
  push hl     ;5ac7
  ldir    ;5ac8
  pop bc      ;5aca
  pop de      ;5acb
  push de     ;5acc
  ld hl,00126h    ;5acd
  add hl,de     ;5ad0
  ld (hl),03bh    ;5ad1
  inc hl      ;5ad3
  ld (hl),000h    ;5ad4
  ld hl,SA_RelocT ;l63b8h    ;5ad6
  call Relocate ;sub_6304h    ;5ad9
;
  ld hl,T5B48    ;5adc
  xor a     ;5adf
  ld b,a      ;5ae0
  ld d,a      ;5ae1
l5ae2h:
  ld e,(hl)     ;5ae2
  cp e      ;5ae3
  jr z,l5af6h   ;5ae4
  inc hl      ;5ae6
  ld c,(hl)     ;5ae7
  inc hl      ;5ae8
  ex (sp),hl      ;5ae9
  add hl,bc     ;5aea
  ex de,hl      ;5aeb
  ld (hl),0c3h    ;5aec
  inc hl      ;5aee
  ld (hl),e     ;5aef
  inc hl      ;5af0
  ld (hl),d     ;5af1
  ex de,hl      ;5af2
  ex (sp),hl      ;5af3
  jr l5ae2h   ;5af4
l5af6h:
  pop hl      ;5af6
  ld hl,SwitchSSLOT ;l656bh    ;5af7
  ld de,0003bh    ;5afa
  ld bc,0001ah    ;5afd
  ldir    ;5b00
  ld bc,00045h    ;5b02
  call AllocDOS ;sub_5f2ah    ;5b05
  push hl     ;5b08
  ex de,hl      ;5b09
  ld hl,INTRsub ;l6334h    ;5b0a
  push hl     ;5b0d
  ldir    ;5b0e
  pop bc      ;5b10
  pop de      ;5b11
  push de     ;5b12
  ld hl,RT_Intr ;l632ch    ;5b13
  call Relocate ;sub_6304h    ;5b16
  pop hl      ;5b19
  ld a,0c3h   ;5b1a
  ld (00038h),a   ;5b1c
  ld (00039h),hl    ;5b1f
  ld de,00022h    ;5b22
  add hl,de     ;5b25
  ld de,(0f34bh)    ;5b26
  ld (hl),e     ;5b2a
  inc hl      ;5b2b
  ld (hl),d     ;5b2c
  ld bc,000a0h    ;5b2d    ;For Interrupt stack
  call AllocDOS ;sub_5f2ah    ;5b30
  ld a,0c3h   ;5b33
  call SetROMcalls ;sub_5ce9h    ;5b35
  scf     ;5b38
GoBootDisk: ;sub_5b39h:
  ld hl,0f323h    ;5b39
  ld de,0f368h    ;5b3c
  ld a,(0f340h)   ;5b3f
  jp 0c01eh   ;5b42

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Boot from disk
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

DiskBootSequence: ;sub_5b45h:
  ld a,(0f346h)   ;5b45
  or a      ;5b48
  jr nz,l5b56h    ;5b49
  call GetMySlot ;l602dh   ;5b4b
  ld b,a      ;5b4e
  ld a,(0fb22h)   ;5b4f
  cp b      ;5b52
  scf     ;5b53
  jr z,l5b66h   ;5b54
l5b56h:
  ld hl,(0f351h)    ;5b56
  ld a,(0f247h)   ;5b59
  ld de,00000h    ;5b5c
  ld bc,001f8h    ;5b5f
  or a      ;5b62
  call 00144h   ;5b63   ;first try to boot from floppy
l5b66h:
  ld a,0ffh   ;5b66
  ld (0f246h),a   ;5b68
  ld hl,(0f351h)    ;5b6b
  call c,DOS_HDD_BOOT ;sub_7958h    ;5b6e ;if not successful, try boot HDD
  ret c     ;5b71
  ld de,0c000h    ;5b72
  ld bc,00100h    ;5b75
  ldir    ;5b78
  ld a,(0c01eh)   ;5b7a
  cp 0d0h   ;5b7d
  jr z,l5b85h   ;5b7f
  cp 018h   ;5b81
  jr nz,l5b8eh    ;5b83
l5b85h:
  ld a,(0c000h)   ;5b85
  cp 0ebh   ;5b88
  ret z     ;5b8a
  cp 0e9h   ;5b8b
  ret z     ;5b8d
l5b8eh:
  scf     ;5b8e
  ret     ;5b8f

T5B48: db  0Ch,00h,14h,21h,30h,2Eh,1Ch,11h,24h,57h,00h
;
AUTOFCB:db  0,'AUTOEXECBAS',0 ;l5b9bh:
;
$autorun:
  db  'RUN"AUTOEXEC.BAS',0 ;l5ba8h:

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

pphDE_Boot:
  dw  hDE_boot
HDD_RunDiskBasic: ;l5bbbh:
  call ResetROMcalls ;sub_5ce7h    ;5bbb
  ld hl,$autorun ;l5ba8h    ;5bbe
  ld de,0f568h    ;5bc1
  ld bc,00011h    ;5bc4
  ldir    ;5bc7
  ld hl,0f340h    ;5bc9
  ld a,(hl)     ;5bcc
  and a     ;5bcd
  ld (hl),h     ;5bce
  jr nz,l5befh    ;5bcf
  ld (0f346h),a   ;5bd1
  ld hl,pphDE_Boot ;l5bb9h    ;5bd4
  ld (0f323h),hl    ;5bd7
  ld hl,AUTOFCB ;l5b9bh    ;5bda
  ld de,0f579h    ;5bdd
  ld bc,00025h    ;5be0
  push de     ;5be3
  ldir    ;5be4
  pop de      ;5be6
  call BDOS_0F ;sub_4462h    ;5be7
  inc a     ;5bea
  jr z,hDE_boot ;l5c13h   ;5beb
  jr RunAutoexecBas ;l5c21h   ;5bed
l5befh:
  ld a,(00000h)   ;5bef
  cp 0c3h   ;5bf2
  jr nz,l5c1dh    ;5bf4
  ld hl,00080h    ;5bf6
  ld b,(hl)     ;5bf9
  inc b     ;5bfa
  dec b     ;5bfb
  jr z,l5c1dh   ;5bfc
l5bfeh:
  inc hl      ;5bfe
  ld a,(hl)     ;5bff
  cp 020h   ;5c00
  jr nz,l5c08h    ;5c02
  djnz l5bfeh   ;5c04
  jr l5c1dh   ;5c06
l5c08h:
  xor a     ;5c08
  ld c,b      ;5c09
  ld b,a      ;5c0a
  ld de,0f56ch    ;5c0b
  ldir    ;5c0e
  ld (de),a     ;5c10
  jr RunAutoexecBas ;l5c21h   ;5c11

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

hDE_boot: ;l5c13h:
  ld sp,0c200h    ;5c13
  ld a,(0f338h)   ;5c16
  and a     ;5c19
  call z,05dc6h   ;5c1a
l5c1dh:
  xor a     ;5c1d
  ld (0f56bh),a   ;5c1e
RunAutoexecBas: ;l5c21h:
  ld sp,0c200h    ;5c21
  ld a,(0f343h)   ;5c24
  ld h,080h   ;5c27
  call 00024h   ;5c29
  ld a,(0fcc1h)   ;5c2c
  ld h,000h   ;5c2f
  call 00024h   ;5c31
  ld hl,(0fc48h)    ;5c34
  xor a     ;5c37
  ld (hl),a     ;5c38
  inc hl      ;5c39
  ld (0f676h),hl    ;5c3a
  ld (hl),a     ;5c3d
  inc hl      ;5c3e
  ld (hl),a     ;5c3f
  inc hl      ;5c40
  ld (0f6c2h),hl    ;5c41
  ld hl,0ffffh    ;5c44
  ld (0f41ch),hl    ;5c47
  call InitBasicMem ;sub_5c9dh    ;5c4a
  ld sp,(0f674h)    ;5c4d
  ld a,0ffh   ;5c51
  ld (0f3deh),a   ;5c53
  ld a,00ch   ;5c56
  rst 18h     ;5c58
  ld ix,07d31h    ;5c59
  call 00159h   ;5c5d
  call PrintMsg ;sub_6000h    ;5c60
  db  13,10,'SOLID Disk BASIC version 1.4',13,10,0
  ld hl,04173h    ;5c84
  push hl     ;5c87
  ld hl,0f567h    ;5c88
  push hl     ;5c8b
  ld hl,0f59eh    ;5c8c
  push hl     ;5c8f
  ld (hl),0e1h    ;5c90
  inc hl      ;5c92
  ld (hl),0c9h    ;5c93
  ld a,(0fcc1h)   ;5c95
  ld h,040h   ;5c98
  jp 00024h   ;5c9a

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

InitBasicMem: ;sub_5c9dh:
  ld hl,pBasEH ;l72b9h    ;5c9d
  ld (0f323h),hl    ;5ca0
  ld hl,pBasCH ;l5cf3h    ;5ca3
  ld (0f325h),hl    ;5ca6
  ld hl,(0f349h)    ;5ca9
  ld (0fc4ah),hl    ;5cac
  ld a,(0f345h)   ;5caf
  ld c,a      ;5cb2
l5cb3h:
  ld b,000h   ;5cb3
  ld de,00025h    ;5cb5
  call Mul_DE_BC ;sub_4916h    ;5cb8
  call Alloc2 ;sub_5f35h    ;5cbb
  ld (0f353h),hl    ;5cbe
  ld bc,00019h    ;5cc1
  call Alloc2 ;sub_5f35h    ;5cc4
  ld (0f378h),hl    ;5cc7
  ex de,hl      ;5cca
  ld hl,T62A3 ;l62ebh    ;5ccb
  ldir    ;5cce
  ld hl,0fff5h    ;5cd0
  add hl,de     ;5cd3
  ld (0f37bh),hl    ;5cd4
  ld a,(0f348h)   ;5cd7
  ld de,0fff9h    ;5cda
  add hl,de     ;5cdd
  ld (hl),a     ;5cde
  ld de,0000eh    ;5cdf
  add hl,de     ;5ce2
  ld (hl),a     ;5ce3
  call SetMaxFiles1 ;sub_5fd9h    ;5ce4
ResetROMcalls: ;sub_5ce7h:
  ld a,0c9h   ;5ce7
SetROMcalls: ;sub_5ce9h:
  ld (0f368h),a   ;5ce9
  ld (0f36bh),a   ;5cec
  ld (0f36eh),a   ;5cef
  ret     ;5cf2

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

pBasCH: dw  GotoBasic ;l5cf3h:
InitBasHooks: ;sub_5cf5h:
  ld hl,T629E ;l62e6h    ;5cf5
  ld de,0febch    ;5cf8
  ld bc,00005h    ;5cfb
  ldir    ;5cfe
  ld hl,BasHookList ;l5d1dh    ;5d00
l5d03h:
  ld e,(hl)     ;5d03
  inc hl      ;5d04
  ld d,(hl)     ;5d05
  inc hl      ;5d06
  ld a,e      ;5d07
  or d      ;5d08
  ret z     ;5d09
  ex de,hl      ;5d0a
  ld (hl),0f7h    ;5d0b
  inc hl      ;5d0d
  ld a,(0f348h)   ;5d0e
  ld (hl),a     ;5d11
  inc hl      ;5d12
  ex de,hl      ;5d13
  ldi   ;5d14
  ldi   ;5d16
  ld a,0c9h   ;5d18
  ld (de),a     ;5d1a
  jr l5d03h   ;5d1b
;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BasHookList:
  dw  0FDEFh
  dw  _DSKO$
  dw  0FE17h
  dw  _DSKI$
  dw  0FDF9h
  dw  _RENAME
  dw  0FDFEh
  dw  _KILL
  dw  0FE08h
  dw  _COPY
  dw  0FE12h
  dw  _DSKF
  dw  0FE21h
  dw  _LSET
  dw  0FE26h
  dw  _RSET
  dw  0FE2Bh
  dw  _FIELD
  dw  0FE30h
  dw  _MKI$
  dw  0FE35h
  dw  _MKS$
  dw  0FE3Ah
  dw  _MKD$
  dw  0FE3Fh
  dw  _CVI
  dw  0FE44h
  dw  _CVS
  dw  0FE49h
  dw  _CVD
  dw  0FE4Eh
  dw  hGetPointer
  dw  0FE58h
  dw  hNoFor
  dw  0FE5Dh
  dw  hNullOpen
  dw  0FE62h
  dw  hNotFile0
  dw  0FE71h
  dw  hBinSave
  dw  0FE76h
  dw  hBinLoad
  dw  0FE7Bh
  dw  _FILES
  dw  0FE80h
  dw  hDiskGET
  dw  0FE85h
  dw  hFileOut1
  dw  0FE8Ah
  dw  hInpDiskChar
  dw  0FE99h
  dw  _LOC
  dw  0FE9Eh
  dw  _LOF
  dw  0FEA3h
  dw  _EOF
  dw  0FEADh
  dw  hBackUp
  dw  0FEB2h
  dw  hParDev
  dw  0FEB7h
  dw  hNoDevName
  dw  0FEFDh
  dw  hERRP
  dw  0FFA7h
  dw  PhyDiskIO
  dw  0FFACh
  dw  hBasFormat
  dw  0F331h
  dw  Basic_F37D
  dw  0

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Input date @ statup
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

$JapDate:
  db  1,'H-',1,'A-',1,'G):',0   ;date in japaneese format
$UsaDate:
  db  'M-D-Y):',0
$EuroDate:
  db  'D-M-Y):',0


DateInput:
  ld  (0F5C0h),sp
  ld a,014h   ;5dca
  ld (0f5c2h),a   ;5dcc
l5dcfh:
  call PrintMsg ;sub_6000h    ;5dcf
  db  0Dh,0Ah,'Enter date (',0
  ld a,(0f30eh)   ;5de1
  cp 001h   ;5de4
  ld hl,$JapDate ;l5dabh    ;5de6
  jr c,l5df3h   ;5de9
  ld hl,$UsaDate ;05db6h    ;5deb
  jr z,l5df3h   ;5dee
  ld hl,$EuroDate ;05dbeh    ;5df0
l5df3h:
  call PrintString ;sub_6006h    ;5df3
  ld hl,pDateCH ;l5ec8h    ;5df6
  ld (0f325h),hl    ;5df9
  ld de,0f5c2h    ;5dfc
  call BDOS_0A ;sub_50e0h    ;5dff
  ld hl,0f5c4h    ;5e02
  ld a,(hl)     ;5e05
  cp 00dh   ;5e06
l5e08h:
  ret z     ;5e08
  ld a,(0f30eh)   ;5e09
  and a     ;5e0c
  jr nz,l5e21h    ;5e0d
  call GetYearNo ;sub_5e8ah    ;5e0f
  call SkipDateSepar ;sub_5e66h    ;5e12
  ld d,c      ;5e15
  ld a,(hl)     ;5e16
  inc hl      ;5e17
  cp b      ;5e18
  jr nz,l5e4dh    ;5e19
  call GetDecimal ;sub_5e75h    ;5e1b
  ld e,c      ;5e1e
  jr l5e3bh   ;5e1f
l5e21h:
  call GetDecimal ;sub_5e75h    ;5e21
  ld d,c      ;5e24
  call SkipDateSepar ;sub_5e66h    ;5e25
  ld e,c      ;5e28
  ld a,(hl)     ;5e29
  inc hl      ;5e2a
  cp b      ;5e2b
  jr nz,l5e33h    ;5e2c
  call GetYearNo ;sub_5e8ah    ;5e2e
  jr l5e3bh   ;5e31
l5e33h:
  push de     ;5e33
  call BDOS_2A ;sub_553ch    ;5e34
  push hl     ;5e37
  pop ix    ;5e38
  pop de      ;5e3a
l5e3bh:
  ld a,(0f30eh)   ;5e3b
  cp 002h   ;5e3e
  jr c,l5e45h   ;5e40
  ld a,e      ;5e42
  ld e,d      ;5e43
  ld d,a      ;5e44
l5e45h:
  push ix   ;5e45
  pop hl      ;5e47
  call BDOS_2B ;sub_5552h    ;5e48
  or a      ;5e4b
  ret z     ;5e4c
l5e4dh:
  ld sp,(0f5c0h)    ;5e4d
  call PrintMsg ;sub_6000h    ;5e51
  db  13,10,'Invalid date',0
  jp l5dcfh   ;5e63

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

SkipDateSepar: ;sub_5e66h:
  ld a,(hl)     ;5e66
  inc hl      ;5e67
  ld b,a      ;5e68
  cp 02fh   ;5e69
  jr z,GetDecimal ;sub_5e75h    ;5e6b
  cp 02eh   ;5e6d
  jr z,GetDecimal ;sub_5e75h    ;5e6f
  cp 02dh   ;5e71
  jr nz,l5e4dh    ;5e73
GetDecimal: ;sub_5e75h:
  call GetDigitx ;sub_5ebeh    ;5e75
  jr c,l5e4dh   ;5e78
  ld c,a      ;5e7a
  call GetDigitx ;sub_5ebeh    ;5e7b
  ret c     ;5e7e
  push af     ;5e7f
  ld a,c      ;5e80
  add a,a     ;5e81
  add a,a     ;5e82
  add a,c     ;5e83
  add a,a     ;5e84
  ld c,a      ;5e85
  pop af      ;5e86
  add a,c     ;5e87
  ld c,a      ;5e88
  ret     ;5e89

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GetYearNo: ;sub_5e8ah:
  call GetDecimal ;sub_5e75h    ;5e8a
  ld b,c      ;5e8d
  call GetDigitx ;sub_5ebeh    ;5e8e
  jr c,l5ea9h   ;5e91
  dec hl      ;5e93
  call GetDecimal ;sub_5e75h    ;5e94
  push hl     ;5e97
  push bc     ;5e98
  ld c,b      ;5e99
  ld b,000h   ;5e9a
  push de     ;5e9c
  ld de,00064h    ;5e9d
  call Mul_DE_BC ;sub_4916h    ;5ea0
  pop de      ;5ea3
  pop hl      ;5ea4
  ld h,000h   ;5ea5
  jr l5eb8h   ;5ea7
l5ea9h:
  push hl     ;5ea9
  ld c,b      ;5eaa
  ld b,000h   ;5eab
  ld hl,0076ch    ;5ead
  ld a,c      ;5eb0
  cp 050h   ;5eb1
  jr nc,l5eb8h    ;5eb3
  ld hl,007d0h    ;5eb5
l5eb8h:
  add hl,bc     ;5eb8
  push hl     ;5eb9
  pop ix    ;5eba
  pop hl      ;5ebc
  ret     ;5ebd

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GetDigitx: ;sub_5ebeh:
  ld a,(hl)     ;5ebe
  sub 030h    ;5ebf
  ret c     ;5ec1
  cp 00ah   ;5ec2
  ccf     ;5ec4
  ret c     ;5ec5
  inc hl      ;5ec6
  ret     ;5ec7
pDateCH: ;l5ec8h:
  dw  err$da
err$da:
 ld  sp,(0F5C0h)      ;???????????????????????????
  ret     ;5ece

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

TryFindRAM: ;sub_5ecfh:
  ld hl,0fcc1h    ;5ecf
  ld b,004h   ;5ed2
  xor a     ;5ed4
l5ed5h:
  and 003h    ;5ed5
  or (hl)     ;5ed7
l5ed8h:
  push bc     ;5ed8
  push hl     ;5ed9
  ld h,c      ;5eda
l5edbh:
  ld l,010h   ;5edb
l5eddh:
  push af     ;5edd
  call 0000ch   ;5ede
  cpl     ;5ee1
  ld e,a      ;5ee2
  pop af      ;5ee3
  push de     ;5ee4
  push af     ;5ee5
  call 00014h   ;5ee6
  pop af      ;5ee9
  pop de      ;5eea
  push af     ;5eeb
  push de     ;5eec
  call 0000ch   ;5eed
  pop bc      ;5ef0
  ld b,a      ;5ef1
  ld a,c      ;5ef2
  cpl     ;5ef3
  ld e,a      ;5ef4
  pop af      ;5ef5
  push af     ;5ef6
  push bc     ;5ef7
  call 00014h   ;5ef8
  pop bc      ;5efb
  ld a,c      ;5efc
  cp b      ;5efd
  jr nz,l5f17h    ;5efe
  pop af      ;5f00
  dec l     ;5f01
  jr nz,l5eddh    ;5f02
  inc h     ;5f04
  inc h     ;5f05
  inc h     ;5f06
  inc h     ;5f07
  ld c,a      ;5f08
  ld a,h      ;5f09
  cp 040h   ;5f0a
  jr z,l5f13h   ;5f0c
  cp 080h   ;5f0e
  ld a,c      ;5f10
  jr nz,l5edbh    ;5f11
l5f13h:
  ld a,c      ;5f13
  pop hl      ;5f14
  pop hl      ;5f15
  ret     ;5f16
l5f17h:
  pop af      ;5f17
  pop hl      ;5f18
  pop bc      ;5f19
  and a     ;5f1a
  jp p,l5f24h   ;5f1b
  add a,004h    ;5f1e
  cp 090h   ;5f20
  jr c,l5ed8h   ;5f22
l5f24h:
  inc hl      ;5f24
  inc a     ;5f25
  djnz l5ed5h   ;5f26
  scf     ;5f28
  ret     ;5f29

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;     Allocate memory from top down
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

AllocDOS: ;sub_5f2ah:
  ld hl,(0f34bh)    ;5f2a
  and a     ;5f2d
  sbc hl,bc   ;5f2e
  ld (0f34bh),hl    ;5f30
  jr l5f3eh   ;5f33
Alloc2: ;sub_5f35h:
  ld hl,(0fc4ah)    ;5f35
  and a     ;5f38
  sbc hl,bc   ;5f39
  ld (0fc4ah),hl    ;5f3b
l5f3eh:
  jr c,NoMemry ;l5f49h   ;5f3e
  ld a,h      ;5f40
  cp 0c2h   ;5f41
  jr l5f48h   ;5f43
AllocMem: ;sub_5f45h:
  call _malloc ;sub_5f62h    ;5f45
l5f48h:
  ret nc      ;5f48
NoMemry: ;l5f49h:
  call PrintMsg ;sub_6000h    ;5f49
  db  0Ch
er_mem: db  'No memory for HDD',0,0
  di      ;5f60
  halt      ;5f61

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Allocate top-to-bottom
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

_malloc: ;sub_5f62h:
  ld a,l      ;5f62
  or h      ;5f63
  ret z     ;5f64
  xor a     ;5f65
  sub l     ;5f66
  ld l,a      ;5f67
  ld a,000h   ;5f68
  sbc a,h     ;5f6a
  ld h,a      ;5f6b
  ld c,l      ;5f6c
  ld b,h      ;5f6d
  add hl,sp     ;5f6e
  ccf     ;5f6f
  ret c     ;5f70
  ld de,(0fc48h)    ;5f71
  sbc hl,de   ;5f75
  ret c     ;5f77
  ld a,h      ;5f78
  cp 002h   ;5f79
  ret c     ;5f7b
  push bc     ;5f7c
  ld hl,00000h    ;5f7d
  add hl,sp     ;5f80
  ld e,l      ;5f81
  ld d,h      ;5f82
  add hl,bc     ;5f83
  push hl     ;5f84
  ld hl,(0f674h)    ;5f85
  and a     ;5f88
  sbc hl,de   ;5f89
  ld c,l      ;5f8b
  ld b,h      ;5f8c
  inc bc      ;5f8d
  pop hl      ;5f8e
  ld sp,hl      ;5f8f
  ex de,hl      ;5f90
  ldir    ;5f91
  pop bc      ;5f93
  ld hl,(0fc4ah)    ;5f94
  add hl,bc     ;5f97
  ld (0fc4ah),hl    ;5f98
  ld de,0fdeah    ;5f9b
  add hl,de     ;5f9e
  ld (0f860h),hl    ;5f9f
  ex de,hl      ;5fa2
  ld hl,(0f672h)    ;5fa3
  add hl,bc     ;5fa6
  ld (0f672h),hl    ;5fa7
  ld hl,(0f862h)    ;5faa
  add hl,bc     ;5fad
  ld (0f862h),hl    ;5fae
  ld hl,(0f674h)    ;5fb1
  add hl,bc     ;5fb4
l5fb5h:
  ld (0f674h),hl    ;5fb5
  dec hl      ;5fb8
  dec hl      ;5fb9
  ld (0f6b1h),hl    ;5fba
  ld l,e      ;5fbd
  ld h,d      ;5fbe
  inc hl      ;5fbf
  inc hl      ;5fc0
  inc hl      ;5fc1
  inc hl      ;5fc2
  ld a,002h   ;5fc3
l5fc5h:
  ex de,hl      ;5fc5
  ld (hl),e     ;5fc6
  inc hl      ;5fc7
  ld (hl),d     ;5fc8
  inc hl      ;5fc9
  ex de,hl      ;5fca
  ld bc,00007h    ;5fcb
  ld (hl),b     ;5fce
  add hl,bc     ;5fcf
  ld (hl),b     ;5fd0
  ld bc,00102h    ;5fd1
  add hl,bc     ;5fd4
  dec a     ;5fd5
  jr nz,l5fc5h    ;5fd6
  ret     ;5fd8

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Other memory setups
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

SetMaxFiles1: ;sub_5fd9h:
  ld a,001h   ;5fd9
  ld (0f85fh),a   ;5fdb
  ld hl,(0fc4ah)    ;5fde
  ld de,0fdeah    ;5fe1
  add hl,de     ;5fe4
  ld (0f860h),hl    ;5fe5
  ld e,l      ;5fe8
  ld d,h      ;5fe9
  dec hl      ;5fea
  dec hl      ;5feb
  ld (0f672h),hl    ;5fec
  ld bc,000c8h    ;5fef
  and a     ;5ff2
  sbc hl,bc   ;5ff3
  push hl     ;5ff5
  ld hl,0000dh    ;5ff6
  add hl,de     ;5ff9
  ld (0f862h),hl    ;5ffa
  pop hl      ;5ffd
  jr l5fb5h   ;5ffe

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Print inline message
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

PrintMsg: ;sub_6000h:
  ex (sp),hl      ;6000
  call PrintString ;sub_6006h    ;6001
  ex (sp),hl      ;6004
  ret     ;6005

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Print string
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

PrintString: ;sub_6006h:
  ld a,(hl)     ;6006
  inc hl      ;6007
  and a     ;6008
  ret z     ;6009
  call PutChar ;sub_408fh    ;600a
  jr PrintString ;sub_6006h    ;600d

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Get slots
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GetSlotP3: ;sub_600fh:
  ld b,006h   ;600f
  db  '!'   ;LD HL,...
GetSlotP2:
  ld  b,4
  call 0f365h   ;6014
  push bc     ;6017
l6018h:
  rrca      ;6018
  djnz l6018h   ;6019
  call GetExpFlags ;sub_6066h    ;601b
  pop bc      ;601e
  or (hl)     ;601f
  ld c,a      ;6020
  inc hl      ;6021
  inc hl      ;6022
  inc hl      ;6023
  inc hl      ;6024
  ld a,(hl)     ;6025
  dec b     ;6026
  dec b     ;6027
l6028h:
  rrca      ;6028
  djnz l6028h   ;6029
  jr l6038h   ;602b

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Where am I ???
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GetMySlot: ;l602dh:
  call GetMyPSLOT ;sub_6061h    ;602d
  or (hl)     ;6030
  ret p     ;6031
  ld c,a      ;6032
  inc hl      ;6033
  inc hl      ;6034
  inc hl      ;6035
  inc hl      ;6036
  ld a,(hl)     ;6037
l6038h:
  and 00ch    ;6038
  or c      ;603a
  ret     ;603b

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GetWorkBuf: ;sub_603ch:
  call GetWorkRAMAdr ;sub_6047h    ;603c
  ld a,(hl)     ;603f
  inc hl      ;6040
  ld h,(hl)     ;6041
  ld l,a      ;6042
  push hl     ;6043
  pop ix    ;6044
  ret     ;6046

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GetWorkRAMAdr: ;sub_6047h:
  call GetMyPSLOT ;sub_6061h    ;6047
  add a,a     ;604a
  add a,a     ;604b
  add a,a     ;604c
  scf     ;604d
  adc a,a     ;604e
  ld c,a      ;604f
  ld a,(hl)     ;6050
  add a,a     ;6051
  sbc a,a     ;6052
  and 00ch    ;6053
  inc hl      ;6055
  inc hl      ;6056
  inc hl      ;6057
  inc hl      ;6058
  and (hl)      ;6059
  or c      ;605a
  add a,a     ;605b
  ld hl,0fd09h    ;605c
  jr IndexHL_BC ;l606dh   ;605f

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GetMyPSLOT: ;sub_6061h:
  call 0f365h   ;6061
  rrca      ;6064
  rrca      ;6065
GetExpFlags: ;sub_6066h:
  and 003h    ;6066
  ld hl,0fcc1h    ;6068
IndexHL_A: ;sub_606bh:
  ld b,000h   ;606b
IndexHL_BC: ;l606dh:
  ld c,a      ;606d
  add hl,bc     ;606e
  ret     ;606f

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Sector I/O: all drives OK
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

ReadSector_all: ;sub_6070h:
  and a     ;6070
  jr PhyDiskIO ;l6074h   ;6071
WriteSector_all: ;sub_6073h:
  scf     ;6073
PhyDiskIO: ;l6074h:
  push ix   ;6074
  push iy   ;6076
  push hl     ;6078
  push af     ;6079
  call GetDiskSlot ;sub_60a2h    ;607a
  ld l,a      ;607d
  pop af      ;607e
  ld a,l      ;607f
  ld ix,04010h    ;6080
  jr l609ah   ;6084

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Disk change: all disks OK
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

DiskChg_all: ;sub_6086h:
  push ix   ;6086
  ld ix,04013h    ;6088
  jr l6094h   ;608c
SetDPB_all: ;sub_608eh:
  push ix   ;608e
  ld ix,04016h    ;6090
l6094h:
  push iy   ;6094
  push hl     ;6096
  call GetDiskSlot ;sub_60a2h    ;6097
l609ah:
  pop hl      ;609a
  push hl     ;609b
  call 0001ch   ;609c
  jp l636ch   ;609f

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Get ROM slot for logical dsk
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GetDiskSlot: ;sub_60a2h:
  ld (0f33fh),a   ;60a2
  ld hl,0fb21h    ;60a5
l60a8h:
  sub (hl)      ;60a8
  jr c,l60afh   ;60a9
  inc hl      ;60ab
  inc hl      ;60ac
  jr l60a8h   ;60ad
l60afh:
  add a,(hl)      ;60af
  inc hl      ;60b0
  ld h,(hl)     ;60b1
  push hl     ;60b2
  pop iy    ;60b3
  ret     ;60b5

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Restet FAT change flags
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

ResetFATflgs: ;sub_60b6h:
  ld hl,0f355h    ;60b6
  call IndexHL_A ;sub_606bh    ;60b9
  add hl,bc     ;60bc
  ld e,(hl)     ;60bd
  inc hl      ;60be
  ld d,(hl)     ;60bf
  ld hl,00013h    ;60c0
  add hl,de     ;60c3
  ld e,(hl)     ;60c4
  inc hl      ;60c5
  ld d,(hl)     ;60c6
  dec de      ;60c7
  ex de,hl      ;60c8
  ld (hl),0ffh    ;60c9
  ret     ;60cb

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Format drive
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

hBasFormat:
  and a     ;60cc
HDD_CondFormat: ;l60cdh:
  ld (0f339h),sp    ;60cd
  call nc,AllocMemStack ;sub_62d4h   ;60d1
  push hl     ;60d4
  push bc     ;60d5
  ld a,(0f347h)   ;60d6
  dec a     ;60d9
  jr z,l6118h   ;60da
l60dch:
  call PrintMsg ;sub_6000h    ;60dc
  db  'Drive name? (',0
  ld a,(0f347h)   ;60ed
  ld b,a      ;60f0
  ld a,041h   ;60f1
  jr l60fch   ;60f3
l60f5h:
  push af     ;60f5
  ld a,02ch   ;60f6
  call PutChar ;sub_408fh    ;60f8
  pop af      ;60fb
l60fch:
  call PutChar ;sub_408fh    ;60fc
  inc a     ;60ff
  djnz l60f5h   ;6100
  call PrintMsg ;sub_6000h    ;6102
  db  ') ',0
  call AskKeyPress ;sub_61a7h    ;6108
  call EchoChar ;sub_62c4h    ;610b
  and 0dfh    ;610e
  sub 041h    ;6110
  ld hl,0f347h    ;6112
  cp (hl)     ;6115
  jr nc,l60dch    ;6116
l6118h:
  call ResetFATflgs ;sub_60b6h    ;6118
  call GetDiskSlot ;sub_60a2h    ;611b
  push iy   ;611e
  push af     ;6120
  push iy   ;6121
  ld ix,04019h    ;6123
  call 0001ch   ;6127
  ld a,l      ;612a
  or h      ;612b
  jr z,l6155h   ;612c
  pop af      ;612e
l612fh:
  push af     ;612f
  call 0000ch   ;6130
  and a     ;6133
  jr z,l613dh   ;6134
  call PutChar ;sub_408fh    ;6136
  inc hl      ;6139
  pop af      ;613a
  jr l612fh   ;613b
l613dh:
  pop af      ;613d
  call PrintMsg ;sub_6000h    ;613e
  db  '? ',0
l6144h:
  call AskKeyPress ;sub_61a7h    ;6144
  sub 031h    ;6147
  cp 009h   ;6149
  jr nc,l6144h    ;614b
  add a,031h    ;614d
  call EchoChar ;sub_62c4h    ;614f
  sub 030h    ;6152
l6154h:
  push af     ;6154
l6155h:
  call WaitAnyKey ;sub_618bh    ;6155
  pop af      ;6158
  pop de      ;6159
  pop iy    ;615a
  pop bc      ;615c
  pop hl      ;615d
  ld ix,0401ch    ;615e
  call 0001ch   ;6162
  ld hl,$fmt_ok ;l61f2h    ;6165
  jr nc,l6174h    ;6168
  ld hl,T6212 ;l625ah    ;616a
  call IndexHL_A ;sub_606bh    ;616d
  ld a,(hl)     ;6170
  inc hl      ;6171
  ld h,(hl)     ;6172
  ld l,a      ;6173
l6174h:
  call NewLine ;sub_62c7h    ;6174
  call PrintString ;sub_6006h    ;6177
  jp NewLine ;sub_62c7h    ;617a

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

KillbGetc: ;sub_617dh:
  xor a     ;617d
  ld (0f336h),a   ;617e
  ld ix,00156h    ;6181
  call BIOS_Call ;sub_40abh    ;6185
  jp CharAvail ;sub_4078h    ;6188
;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

WaitAnyKey: ;sub_618bh:
  call PrintMsg ;sub_6000h    ;618b
  db  'Strike a key when ready ',0
AskKeyPress: ;sub_61a7h:
  call KillbGetc ;sub_617dh    ;61a7
  cp 003h   ;61aa
  ret nz      ;61ac
  ld sp,(0f339h)    ;61ad
  call PrintMsg ;sub_6000h    ;61b1
  db  0Dh,0Ah,'Aborted',0
  ret     ;61be

er_wp:  db  'Write protected',0
er_nr:  db  'Not ready',0
er_de:  db  'Disk error',0
er_bp:  db  'Bad parameter',0
$fmt_ok:db  'Format complete',0,0

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

l6203h:
  ld de,0f698h    ;6203
  ld hl,(0f678h)    ;6206
  ld (0f7f8h),hl    ;6209
  ld a,003h   ;620c
  ld (0f663h),a   ;620e
  call 02ef3h   ;6211
  ld de,0f69bh    ;6214
  rst 20h     ;6217
  ld (0f678h),hl    ;6218
  ret nz      ;621b
  jp .368 ;l72ffh   ;621c

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Stop motors for all disks
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

StopAll: ;l621fh:
  ld hl,0fb21h    ;621f
  ld b,004h   ;6222
l6224h:
  inc hl      ;6224
  ld a,(hl)     ;6225
  push af     ;6226
  pop iy    ;6227
  inc hl      ;6229
  push hl     ;622a
  push bc     ;622b
  ld hl,0401fh    ;622c
  push hl     ;622f
  pop ix    ;6230
  and a     ;6232
  call nz,0000ch    ;6233
l6236h:
  and a     ;6236
  call nz,0001ch    ;6237
  pop bc      ;623a
  pop hl      ;623b
  djnz l6224h   ;623c
  ret     ;623e

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

SetRuHook: ;sub_623fh:
  ld a,(0fed0h)   ;623f
  cp 0c9h   ;6242
  jr z,l6257h   ;6244
  ld hl,T72A8 ;l72fah    ;6246
  ld de,0fed5h    ;6249
  ld bc,00005h    ;624c
  ldir    ;624f
  call sub_402dh    ;6251
  ld (0fed6h),a   ;6254
l6257h:
  jp sub_402dh    ;6257
;
T6212:  dw  er_wp
  dw  er_nr
  dw  er_de
  dw  er_de
  dw  er_de
  dw  er_de
  dw  er_bp
  dw  er_mem
  dw  er_de

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Not used in this ROM
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

InsertDisk:
  ld a,(0f33fh)   ;626c
  add a,041h    ;626f
  call 0f24fh   ;6271
  push af     ;6274
  call PrintMsg ;sub_6000h    ;6275
  db  0Dh,0Ah,'Insert diskette for drive ',0
  pop af      ;6295
  call PutChar ;sub_408fh    ;6296
  call PrintMsg ;sub_6000h    ;6299
  db  ':',0Dh,0Ah,'and strike a key when ready',0
insd1: ;l62bbh:
  call KillbGetc ;sub_617dh    ;62bb
  cp 003h   ;62be
  jr z,insd1 ;l62bbh   ;62c0
  jr NewLine ;sub_62c7h    ;62c2

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

EchoChar: ;sub_62c4h:
  call PutChar ;sub_408fh    ;62c4
NewLine: ;sub_62c7h:
  push af     ;62c7
  ld a,00dh   ;62c8
  call PutChar ;sub_408fh    ;62ca
  ld a,00ah   ;62cd
  call PutChar ;sub_408fh    ;62cf
  pop af      ;62d2
  ret     ;62d3

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

AllocMemStack: ;sub_62d4h:
  ld hl,0ff00h    ;62d4
  add hl,sp     ;62d7
  ld de,(0f6c6h)    ;62d8
  xor a     ;62dc
  sbc hl,de   ;62dd
  ld c,l      ;62df
  ld b,h      ;62e0
  ex de,hl      ;62e1
  ret nc      ;62e2
  ld c,a      ;62e3
  ld b,a      ;62e4
  ret     ;62e5

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; This transferred to up
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

T629E: ;l62e6h:
  inc sp      ;62e6
  inc sp      ;62e7
  jp 06f1dh   ;62e8
;
T62A3: ;l62ebh:
  ld a,d      ;62eb    ;BSAVE/BLOAD hooks
  cp 009h   ;62ec
  jp nc,l6ec9h    ;62ee
l62f1h:
  rst 30h     ;62f1
  nop     ;62f2
  dw  BLOAD_HND
  push hl     ;62f5
  jp 06ef4h   ;62f6
  ld a,d      ;62f9
  cp 009h   ;62fa
  jp nc,l6e95h    ;62fc
  rst 30h     ;62ff
  nop     ;6300
  dw  BSAVE_HND
  ret     ;6303

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Address relocation sub
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

Relocate: ;sub_6304h:
  push de     ;6304
  ex de,hl      ;6305
  and a     ;6306
  sbc hl,bc   ;6307
  push hl     ;6309
  pop ix    ;630a
l630ch:
  ex de,hl      ;630c
  pop de      ;630d
l630eh:
  ld c,(hl)     ;630e
  inc hl      ;630f
  ld b,(hl)     ;6310
  inc hl      ;6311
  ld a,c      ;6312
  and b     ;6313
  inc a     ;6314
  ret z     ;6315
  push de     ;6316
l6317h:
  ex de,hl      ;6317
l6318h:
  add hl,bc     ;6318
  inc hl      ;6319
  ld c,(hl)     ;631a
  inc hl      ;631b
  ld b,(hl)     ;631c
  push hl     ;631d
  push ix   ;631e
  pop hl      ;6320
  add hl,bc     ;6321
  ld c,l      ;6322
  ld b,h      ;6323
  pop hl      ;6324
  ld (hl),b     ;6325
  dec hl      ;6326
  ld (hl),c     ;6327
l6328h:
  ex de,hl      ;6328
  pop de      ;6329
  jr l630eh   ;632a

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; relocation table for ISR
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ
RT_Intr: ;l632ch:
  dw  0Ch
  dw  1Eh
  dw  2Fh
  dw  0FFFFh

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; ISR: relocated up for DOS
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

INTRsub: ;l6334h:
  push ix   ;6334
  push iy   ;6336
  push hl     ;6338
  push de     ;6339
  push bc     ;633a
  push af     ;633b
  exx     ;633c
  ex af,af'     ;633d
  push af     ;633e
  push hl     ;633f
   ld hl,(0635dh)    ;6340
  ld a,l      ;6343
  or h      ;6344
  pop hl      ;6345
  ld ix,00038h    ;6346
  ld iy,(0fcc0h)    ;634a
  jr nz,l6373h    ;634e
  pop af      ;6350
  ld (W6315),sp    ;6351   ld (0635dh),sp    ;6351
  ld sp,00000h    ;6355
  call 0001ch   ;6358
  di      ;635b
  ld sp,00000h    ;635c
W6315 equ $-2
  push hl     ;635f
  ld hl,00000h    ;6360
  ld (0635dh),hl    ;6363
  pop hl      ;6366
l6367h:
  ex af,af'     ;6367
  exx     ;6368
  pop af      ;6369
  pop bc      ;636a
  pop de      ;636b
l636ch:
  pop hl      ;636c
  pop iy    ;636d
  pop ix    ;636f
  ei      ;6371
  ret     ;6372
l6373h:
  pop af      ;6373
  call 0001ch   ;6374
  jr l6367h   ;6377

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; XFER - relocated up
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

XFERsub: ;l6379h:
  push af     ;6379
  push hl     ;637a
  push de     ;637b
  push bc     ;637c
  call sub_402dh    ;637d
  push af     ;6380
  ld h,040h   ;6381
  ld a,(0f342h)   ;6383
  call 00024h   ;6386
  pop af      ;6389
  pop bc      ;638a
  pop de      ;638b
  pop hl      ;638c
  ldir    ;638d
  push hl     ;638f
  push de     ;6390
  push bc     ;6391
  call 0f368h   ;6392
  ld h,040h   ;6395
  call 00024h   ;6397
  pop bc      ;639a
  pop de      ;639b
  pop hl      ;639c
  pop af      ;639d
  ret     ;639e

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Disk ROM on/off
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

ONOFFsub: ;l639fh:
  jr l63a7h   ;639f
  push af     ;63a1
  ld a,(0f342h)   ;63a2
  jr l63abh   ;63a5
l63a7h:
  push af     ;63a7
  ld a,(0f348h)   ;63a8
l63abh:
  push hl     ;63ab
  push de     ;63ac
  push bc     ;63ad
  ld h,040h   ;63ae
  call 00024h   ;63b0
  pop bc      ;63b3
  pop de      ;63b4
  pop hl      ;63b5
  pop af      ;63b6
  ret     ;63b7

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;   reloc table for slot addressing
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

SA_RelocT: ;l63b8h:
  dw  0
  dw  3
  dw  10h
  dw  13h
  dw  17h
  dw  1Ch
  dw  22h
  dw  25h
  dw  31h
  dw  34h
  dw  39h
  dw  3Fh
  dw  68h ;*
  dw  6Bh ;*
  dw  73h ;* ins
  dw  87h
  dw  8Ah
  dw  8Dh
  dw  0A3h
  dw  0B7h
  dw  0BAh
  dw  0C4h
  dw  0C7h
  dw  0CBh
  dw  139h
  dw  140h
  dw  147h
  dw  154h
  dw  15Ch
;
  dw  0FFFFh

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Slot addressing routines
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW 0C (read slot sub)
SLOTSsub: ;l63f4h:
  call GetSlotMasks ;sub_64d1h    ;63f4
  jp m,l6404h   ;63f7
  in a,(0a8h)   ;63fa
  ld d,a      ;63fc
  and c     ;63fd
  or b      ;63fe
  call 0f380h   ;63ff
  ld a,e      ;6402
  ret     ;6403
l6404h:
  call sub_6520h    ;6404
  jp z,l652dh   ;6407
  push hl     ;640a
  call PutSSLOT ;sub_64f6h    ;640b
  ex (sp),hl      ;640e
  push bc     ;640f
  call SLOTSsub ;l63f4h   ;6410
  jr l6436h   ;6413
;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW 14 (write slot sub)
sub_6415h:
  push de     ;6415
  call GetSlotMasks ;sub_64d1h    ;6416
  jp m,l6425h   ;6419
  pop de      ;641c
  in a,(0a8h)   ;641d
  ld d,a      ;641f
  and c     ;6420
  or b      ;6421
  jp 0f385h   ;6422
l6425h:
  call sub_6520h    ;6425
  jp z,l6533h   ;6428
  ex (sp),hl      ;642b
  push hl     ;642c
  call PutSSLOT ;sub_64f6h    ;642d
  pop de      ;6430
  ex (sp),hl      ;6431
  push bc     ;6432
  call sub_6415h    ;6433
l6436h:
  pop bc      ;6436
  ex (sp),hl      ;6437
  push af     ;6438
  ld a,b      ;6439
  and 03fh    ;643a
  or c      ;643c
  call 00046h   ;643d
  pop af      ;6440
  pop hl      ;6441
  ret     ;6442
;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW 30 (calls slot sub)
  ex (sp),hl      ;6443
  push af     ;6444
  push de     ;6445
  ld a,(hl)     ;6446
  db  0FDh    ;53 LD YH,A
  ld  h,a   ;54
  inc hl      ;644b
  ld  e,(hl)    ;56
  inc hl      ;644d
  ld d,(hl)     ;644c
  inc hl      ;644d
  push de     ;644e
  pop ix    ;644f
  pop de      ;6451
  pop af      ;6452
  ex (sp),hl      ;6453
;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW 1C (callf slot sub)
sub_6454h:
  exx     ;6454
  ex af,af'     ;6455
  push iy   ;6456
  pop af      ;6458
  push ix   ;6459
  pop hl      ;645b
  call GetSlotMasks ;sub_64d1h    ;645c
  jp m,l647bh   ;645f
  ld a,(0ffffh)   ;6462
;
; FIXUP: in Microsoft's Disk BIOS when *THIS* disk BIOS, placed into
; other subslot of MAIN RAM's slot called another (eg. floppy) BIOS
; in another slot, control did not return after inter-slot call.
; Saving secondary slot register seems to fix this and be quite portable.
;
  cpl     ;6465
  push af     ;6466
  ld hl,sscret ;l6474h    ;6467
  push hl     ;646a
  in a,(0a8h)   ;646b
  push af     ;646d
  and c     ;646e
  or b      ;646f
  exx     ;6470
  jp 0f38ch   ;6471
sscret: ;l6474h:
  ex af,af'     ;6474
  pop af      ;6475
  ld (0ffffh),a   ;6476
  ex af,af'     ;6479
  ret     ;647a
l647bh:
  call sub_6520h    ;647b
  jp z,l653bh   ;647e
  call PutSSLOT ;sub_64f6h    ;6481
  push af     ;6484
  pop iy    ;6485
  push hl     ;6487
  push bc     ;6488
  ld c,a      ;6489
  ld b,000h   ;648a
  ld a,l      ;648c
  and h     ;648d
  or d      ;648e
  ld hl,0fcc5h    ;648f
  add hl,bc     ;6492
  ld (hl),a     ;6493
  push hl     ;6494
  ex af,af'     ;6495
  exx     ;6496
  call sub_6454h    ;6497
  exx     ;649a
  ex af,af'     ;649b
  pop hl      ;649c
  pop bc      ;649d
  pop de      ;649e
  ld a,b      ;649f
  and 03fh    ;64a0
  or c      ;64a2
  di      ;64a3
  call 0004bh   ;64a4
  ld (hl),e     ;64a7
  ex af,af'     ;64a8
  exx     ;64a9
  ret     ;64aa
;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW 24 (select slot sub)
l64abh:
  call GetSlotMasks ;sub_64d1h    ;64ab
  jp m,l64b8h   ;64ae
SetPSLOT: ;sub_64b1h:
  in a,(0a8h)   ;64b1
  and c     ;64b3
  or b      ;64b4
  out (0a8h),a    ;64b5
  ret     ;64b7
l64b8h:
  call sub_6520h    ;64b8
  jp z,l6550h   ;64bb
SetSSLOT: ;sub_64beh:
  push hl     ;64be
  call PutSSLOT ;sub_64f6h    ;64bf
  ld c,a      ;64c2
  ld b,000h   ;64c3
  ld a,l      ;64c5
  and h     ;64c6
  or d      ;64c7
  ld hl,0fcc5h    ;64c8
  add hl,bc     ;64cb
  ld (hl),a     ;64cc
  pop hl      ;64cd
  ld a,c      ;64ce
  jr l64abh   ;64cf
;
GetSlotMasks: ;sub_64d1h:
  di      ;64d1
  push af     ;64d2
  ld a,h      ;64d3
  rlca      ;64d4
  rlca      ;64d5
  and 003h    ;64d6
  ld e,a      ;64d8
  inc e     ;64d9
  ld a,0c0h   ;64da
l64dch:
  rlca      ;64dc
  rlca      ;64dd
  dec e     ;64de
  jr nz,l64dch    ;64df
  ld e,a      ;64e1
  cpl     ;64e2
  ld c,a      ;64e3
  pop af      ;64e4
  push af     ;64e5
  and 003h    ;64e6
  ld b,a      ;64e8
  inc b     ;64e9
  ld a,0abh   ;64ea
l64ech:
  add a,055h    ;64ec
  djnz l64ech   ;64ee
  ld d,a      ;64f0
  and e     ;64f1
  ld b,a      ;64f2
  pop af      ;64f3
  and a     ;64f4
  ret     ;64f5
;
PutSSLOT: ;sub_64f6h:
  push af     ;64f6
  ld a,d      ;64f7
  and 0c0h    ;64f8
  ld c,a      ;64fa
  pop af      ;64fb
  push af     ;64fc
  ld d,a      ;64fd
  in a,(0a8h)   ;64fe
  ld b,a      ;6500
  and 03fh    ;6501
  or c      ;6503
  push af     ;6504
  ld a,d      ;6505
  rrca      ;6506
  rrca      ;6507
  and 003h    ;6508
  ld d,a      ;650a
  inc d     ;650b
  ld a,0abh   ;650c
l650eh:
  add a,055h    ;650e
  dec d     ;6510
  jr nz,l650eh    ;6511
  and e     ;6513
  ld d,a      ;6514
  ld a,e      ;6515
  cpl     ;6516
  ld h,a      ;6517
  pop af      ;6518
  call SwitchSSLOT ;l656bh   ;6519
  pop af      ;651c
  and 003h    ;651d
  ret     ;651f
;
sub_6520h:
  ld c,a      ;6520
  ld a,e      ;6521
  cp 003h   ;6522
  ld a,c      ;6524
  ret nz      ;6525
  ld a,(0f341h)   ;6526
  and e     ;6529
  cp b      ;652a
  ld a,c      ;652b
  ret     ;652c
l652dh:
  call sub_6558h    ;652d
  ld e,(hl)     ;6530
  jr l6538h   ;6531
l6533h:
  pop de      ;6533
  call sub_6558h    ;6534
  ld (hl),e     ;6537
l6538h:
  ld a,b      ;6538
  jr l6566h   ;6539
l653bh:
  call l6550h   ;653b
  push hl     ;653e
  push bc     ;653f
  ex af,af'     ;6540
  exx     ;6541
  call 0f398h   ;6542
  exx     ;6545
  ex af,af'     ;6546
  pop bc      ;6547
  call l6538h   ;6548
  pop hl      ;654b
  ld (hl),b     ;654c
  ex af,af'     ;654d
  exx     ;654e
  ret     ;654f
l6550h:
  call sub_6558h    ;6550
  ld hl,0fcc5h    ;6553
  ld (hl),d     ;6556
  ret     ;6557
sub_6558h:
  rrca      ;6558
  rrca      ;6559
  and 003h    ;655a
  ld d,a      ;655c
  ld a,(0ffffh)   ;655d
  cpl     ;6560
  ld b,a      ;6561
  and 0fch    ;6562
  or d      ;6564
  ld d,a      ;6565
l6566h:
  ld (0ffffh),a   ;6566
  ld a,e      ;6569
  ret     ;656a

;
; Moved to lower memory (3B??)
;

SwitchSSLOT:   ;l656bh:
  out (0a8h),a    ;656b
  ld a,(0ffffh)   ;656d
  cpl     ;6570
  ld l,a      ;6571
  and h     ;6572
  or d      ;6573
  jr l657eh   ;6574
  out (0a8h),a    ;6576
  ld a,l      ;6578
  jr l657eh   ;6579
  out (0a8h),a    ;657b
  ld a,e      ;657d
l657eh:
  ld (0ffffh),a   ;657e
  ld a,b      ;6581
  out (0a8h),a    ;6582
  ret     ;6584

;
; BASIC CALL (_FORMAT etc)
;
                        
BasicCallHandler:
  ei      ;6585
  ld a,(0fe4eh)   ;6586
  cp 0c9h   ;6589
  scf     ;658b
  ret z     ;658c
  push hl     ;658d
  call sub_402dh    ;658e
  ld hl,0f348h    ;6591
  cp (hl)     ;6594
  jr nz,l65bch    ;6595
  ld hl,$CallTab ;l65bfh    ;6597
l659ah:
  ld de,0fd89h    ;659a
l659dh:
  ld a,(de)     ;659d
  cp (hl)     ;659e
  jr nz,l65b1h    ;659f
  inc de      ;65a1
  inc hl      ;65a2
  and a     ;65a3
  jr nz,l659dh    ;65a4
  ld a,(hl)     ;65a6
  inc hl      ;65a7
  ld h,(hl)     ;65a8
  ld l,a      ;65a9
  ex (sp),hl      ;65aa
  call CHRGTR ;sub_72e5h    ;65ab
  scf     ;65ae
  ccf     ;65af
  ret     ;65b0
l65b1h:
  ld a,(hl)     ;65b1
  and a     ;65b2
  inc hl      ;65b3
  jr nz,l65b1h    ;65b4
  inc hl      ;65b6
  inc hl      ;65b7
  ld a,(hl)     ;65b8
  and a     ;65b9
  jr nz,l659ah    ;65ba
l65bch:
  pop hl      ;65bc
  scf     ;65bd
  ret     ;65be

$CallTab: ;l65bfh:
  db  'SYSTEM',0
  dw  call_system
  db  'FORMAT',0
  dw  call_format
  db  0

call_system:
  ret nz      ;65d2
  ld a,(0f346h)   ;65d3
  and a     ;65d6
  jp z,.521 ;0731dh   ;65d7
  ld ix,06c1ch    ;65da
  call BasicCall ;sub_7326h    ;65de
  call 000d2h   ;65e1
  call 000cch   ;65e4
  jp l5a6fh   ;65e7


call_format:
  push hl     ;65ea
  call z,HDD_CondFormat ;l60cdh   ;65eb
  pop hl      ;65ee
  and a     ;65ef
  ret     ;65f0
GetDevNo: ;sub_65f1h:
  ld a,d      ;65f1
DevCode: ;sub_65f2h:
  dec a     ;65f2
  ret p     ;65f3
  ld a,(0f247h)   ;65f4
  ret     ;65f7
MakeFCB: ;sub_65f8h:
  push hl     ;65f8
  push de     ;65f9
  push bc     ;65fa
  call GetDevNo ;sub_65f1h    ;65fb
  ld c,a      ;65fe
  ld hl,(0f860h)    ;65ff
  ld a,(0f85fh)   ;6602
l6605h:
  push af     ;6605
  ld e,(hl)     ;6606
  inc hl      ;6607
  ld d,(hl)     ;6608
  inc hl      ;6609
  push hl     ;660a
  ex de,hl      ;660b
  ld a,(hl)     ;660c
  and a     ;660d
  jr z,l663ch   ;660e
  inc hl      ;6610
  inc hl      ;6611
  inc hl      ;6612
  inc hl      ;6613
  ld a,(hl)     ;6614
  cp 009h   ;6615
  jr nc,l663ch    ;6617
  dec hl      ;6619
  dec hl      ;661a
  ld d,(hl)     ;661b
  dec hl      ;661c
  ld e,(hl)     ;661d
  ld a,(de)     ;661e
  call DevCode ;sub_65f2h    ;661f
  cp c      ;6622
  jr nz,l663ch    ;6623
  inc de      ;6625
  ex de,hl      ;6626
l6627h:
  ld de,0f866h    ;6627
  ld b,00bh   ;662a
l662ch:
  ld a,(de)     ;662c
  cp 03fh   ;662d
  jr z,l6634h   ;662f
  cp (hl)     ;6631
  jr nz,l663ch    ;6632
l6634h:
  inc de      ;6634
  inc hl      ;6635
  djnz l662ch   ;6636
  pop hl      ;6638
  pop hl      ;6639
  jr RetBDH ;l66aeh   ;663a
l663ch:
  pop hl      ;663c
  pop af      ;663d
  dec a     ;663e
  jp p,l6605h   ;663f
  jr RetBDH ;l66aeh   ;6642
SearchFile: ;sub_6644h:
  push hl     ;6644
  push de     ;6645
  push bc     ;6646
  ld a,d      ;6647
  ld (0f568h),a   ;6648
  call MoveFCB ;sub_6665h    ;664b
  call FileFind ;sub_6653h    ;664e
  jr RetBDH ;l66aeh   ;6651
FileFind: ;sub_6653h:
  ld hl,0f5b2h    ;6653
  ld (0f23dh),hl    ;6656
  ld de,0f568h    ;6659
  xor a     ;665c
  ld (0f574h),a   ;665d
  call BDOS_11 ;sub_4fb8h    ;6660
  inc a     ;6663
  ret     ;6664

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

MoveFCB: ;sub_6665h:
  ld de,0f569h    ;6665
MovFCBup: ;sub_6668h:
  ld hl,0f866h    ;6668
  ld bc,0000bh    ;666b
  ldir    ;666e
  ret     ;6670

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

InitBasFCB: ;sub_6671h:
  ei      ;6671
  push hl     ;6672
  push de     ;6673
  push bc     ;6674
  push af     ;6675
  ld a,(0f348h)   ;6676
  add a,a     ;6679
  ld hl,00010h    ;667a
  jr nc,l6681h    ;667d
  ld l,018h   ;667f
l6681h:
  add hl,sp     ;6681
  push ix   ;6682
  pop bc      ;6684
  ld (hl),c     ;6685
  inc hl      ;6686
  ld (hl),b     ;6687
  ld hl,0000ah    ;6688
  add hl,sp     ;668b
  ex de,hl      ;668c
  jr l669bh   ;668d
l668fh:
  push iy   ;668f
  pop bc      ;6691
l6692h:
  ld c,(hl)     ;6692
  ld a,(de)     ;6693
  ld (hl),a     ;6694
  ld a,c      ;6695
  ld (de),a     ;6696
  inc hl      ;6697
  inc de      ;6698
  djnz l6692h   ;6699
l669bh:
  ld a,(0f348h)   ;669b
  add a,a     ;669e
  ld hl,00012h    ;669f
  jr nc,l66a6h    ;66a2
  ld l,01ah   ;66a4
l66a6h:
  add hl,sp     ;66a6
  ld a,e      ;66a7
  sub l     ;66a8
  ld a,d      ;66a9
  sbc a,h     ;66aa
  jr c,l668fh   ;66ab
RetABDH: ;l66adh:
  pop af      ;66ad
RetBDH: ;l66aeh:
  pop bc      ;66ae
  pop de      ;66af
  pop hl      ;66b0
  ret     ;66b1

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

hGetPointer:
  ld ix,0f38bh    ;66b2
  ld iy,00200h    ;66b6
  call InitBasFCB ;sub_6671h    ;66ba
  pop hl      ;66bd
  ld a,(hl)     ;66be
  and a     ;66bf
  ret     ;66c0

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

hNoFor:
  ei      ;66c1
  ld bc,00100h    ;66c2
  ld (0f33dh),bc    ;66c5
  call CHRGTR ;sub_72e5h    ;66c9
  ld a,e      ;66cc
  ret z     ;66cd
  push af     ;66ce
  push hl     ;66cf
  ld a,(0f348h)   ;66d0
  add a,a     ;66d3
  ld hl,0000ch    ;66d4
  jr nc,l66dbh    ;66d7
  ld l,014h   ;66d9
l66dbh:
  add hl,sp     ;66db
  ld a,(hl)     ;66dc
  cp 004h   ;66dd
  jp nz,.427 ;07320h    ;66df
  inc hl      ;66e2
  ld a,(hl)     ;66e3
  cp 009h   ;66e4
  jp nc,.427 ;07320h    ;66e6
  pop hl      ;66e9
  call SYNCHR ;sub_72dbh    ;66ea
  rst 38h     ;66ed
  call SYNCHR ;sub_72dbh    ;66ee
  sub d     ;66f1
  call SYNCHR ;sub_72dbh    ;66f2
  rst 28h     ;66f5
  ld ix,04756h    ;66f6
  call BasicCall ;sub_7326h    ;66fa
  dec de      ;66fd
  inc d     ;66fe
  dec d     ;66ff
  jp nz,.521 ;0731dh    ;6700
  inc de      ;6703
  ld (0f33dh),de    ;6704
  pop af      ;6708
  ret     ;6709

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

hNullOpen:
  ei      ;670a
  ret nc      ;670b
  ld ix,0f38bh    ;670c
  ld iy,00400h    ;6710
  call InitBasFCB ;sub_6671h    ;6714
  call 06fb7h   ;6717
  call MakeFCB ;sub_65f8h    ;671a
  jp z,.428 ;07311h   ;671d
  ld (0f864h),hl    ;6720
  ld a,e      ;6723
  cp 004h   ;6724
  jr z,l672fh   ;6726
  ld bc,00001h    ;6728
  ld (0f33dh),bc    ;672b
l672fh:
  pop af      ;672f
  push af     ;6730
  push hl     ;6731
  push de     ;6732
  ld hl,0f345h    ;6733
  cp (hl)     ;6736
  jp nc,.430 ;07314h    ;6737
  ld bc,00025h    ;673a
  ld e,a      ;673d
  ld d,b      ;673e
  ld hl,(0f353h)    ;673f
  call Mul32 ;sub_491ch    ;6742
  xor a     ;6745
  ld hl,0000ch    ;6746
  add hl,bc     ;6749
  ld (hl),a     ;674a
  pop de      ;674b
  pop hl      ;674c
  inc hl      ;674d
  ld (hl),c     ;674e
  inc hl      ;674f
  ld (hl),b     ;6750
  inc hl      ;6751
  ld (hl),a     ;6752
  inc hl      ;6753
  ld (hl),d     ;6754
  inc hl      ;6755
  inc hl      ;6756
  ld (hl),a     ;6757
  call SearchFile ;ыги_6644р    ;6758
  push bc     ;675b
  push de     ;675c
  ld a,d      ;675d
  ld (bc),a     ;675e
  ld e,c      ;675f
  ld d,b      ;6760
  inc de      ;6761
  call MovFCBup ;sub_6668h    ;6762
  pop de      ;6765
  pop bc      ;6766
  ld a,e      ;6767
  jr nz,l6786h    ;6768
  and 086h    ;676a
  jp z,.432 ;l7319h+1   ;676c
l676fh:
  push de     ;676f
  push bc     ;6770
  ld e,c      ;6771
  ld d,b      ;6772
  call BDOS_16 ;sub_461dh    ;6773
  and a     ;6776
  jp nz,071b6h    ;6777
  pop hl      ;677a
  call FCBinitOPEN ;sub_680ch    ;677b
  pop de      ;677e
  ld hl,(0f864h)    ;677f
  ld (hl),e     ;6782
l6783h:
  pop af      ;6783
  pop hl      ;6784
  ret     ;6785
l6786h:
  cp 008h   ;6786
  jr z,l67cfh   ;6788
  cp 002h   ;678a
  jr z,l676fh   ;678c
  cp 080h   ;678e
  jr z,l676fh   ;6790
  push de     ;6792
  push bc     ;6793
  ld e,c      ;6794
  ld d,b      ;6795
  call BDOS_0F ;sub_4462h    ;6796
  pop hl      ;6799
  call FCBinitOPEN ;sub_680ch    ;679a
  pop de      ;679d
  ld hl,(0f864h)    ;679e
  ld (hl),e     ;67a1
  ld a,e      ;67a2
  cp 004h   ;67a3
  jr z,l6783h   ;67a5
  push hl     ;67a7
  ld hl,0fcaeh    ;67a8
  xor a     ;67ab
  cp (hl)     ;67ac
  ld (hl),a     ;67ad
  pop hl      ;67ae
  jr nz,l6783h    ;67af
  ld bc,00006h    ;67b1
  add hl,bc     ;67b4
  push hl     ;67b5
  ld (hl),0ffh    ;67b6
  ld hl,(0f864h)    ;67b8
  call ReadCharacter ;sub_6838h    ;67bb
  pop hl      ;67be
  dec hl      ;67bf
  dec hl      ;67c0
  dec hl      ;67c1
  ld (hl),a     ;67c2
  cp 0ffh   ;67c3
  jr nz,l6783h    ;67c5
  inc hl      ;67c7
  inc hl      ;67c8
  inc hl      ;67c9
  inc hl      ;67ca
  ld (hl),080h    ;67cb
l67cdh:
  jr l6783h   ;67cd
l67cfh:
  push bc     ;67cf
  ld e,c      ;67d0
  ld d,b      ;67d1
  call BDOS_0F ;sub_4462h    ;67d2
  pop hl      ;67d5
  push hl     ;67d6
  call FCBinitOPEN ;sub_680ch    ;67d7
  ld hl,(0f864h)    ;67da
  ld (hl),001h    ;67dd
  ld bc,00006h    ;67df
  add hl,bc     ;67e2
  ld (hl),0ffh    ;67e3
  ld hl,(0f864h)    ;67e5
l67e8h:
  push hl     ;67e8
  call ReadCharacter ;sub_6838h    ;67e9
  pop hl      ;67ec
  jr nc,l67e8h    ;67ed
  ld (hl),002h    ;67ef
  pop hl      ;67f1
  ld bc,00021h    ;67f2
  add hl,bc     ;67f5
  ld c,004h   ;67f6
  push hl     ;67f8
  scf     ;67f9
l67fah:
  ld a,(hl)     ;67fa
  sbc a,b     ;67fb
  ld (hl),a     ;67fc
  inc hl      ;67fd
  dec c     ;67fe
  jr nz,l67fah    ;67ff
  pop hl      ;6801
  inc c     ;6802
  jr nc,l6807h    ;6803
  ld c,004h   ;6805
l6807h:
  call sub_6821h    ;6807
  jr l67cdh   ;680a

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

FCBinitOPEN: ;sub_680ch:
  ld bc,0000ch    ;680c
  add hl,bc     ;680f
  ld (hl),b     ;6810
  inc hl      ;6811
  ld (hl),b     ;6812
  inc hl      ;6813
  ld bc,(0f33dh)    ;6814
  ld (hl),c     ;6818
  inc hl      ;6819
  ld (hl),b     ;681a
  ld bc,00011h    ;681b
  add hl,bc     ;681e
  ld c,005h   ;681f
sub_6821h:
  ld (hl),b     ;6821
  inc hl      ;6822
  dec c     ;6823
  jr nz,sub_6821h   ;6824
  ret     ;6826

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

hInpDiskChar:
  ld ix,0f38bh    ;6827
  ld iy,00600h    ;682b
  call InitBasFCB ;sub_6671h    ;682f
  call ReadCharacter ;sub_6838h    ;6832
  jp RetBDH ;l66aeh   ;6835

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

ReadCharacter: ;sub_6838h:
  push hl     ;6838
  ld a,(hl)     ;6839
  cp 001h   ;683a
  jp nz,071a7h    ;683c
  ld e,l      ;683f
  ld d,h      ;6840
  inc hl      ;6841
  inc hl      ;6842
  inc hl      ;6843
  ld a,(hl)     ;6844
  and a     ;6845
  jr nz,l6874h    ;6846
  inc hl      ;6848
  inc hl      ;6849
  inc hl      ;684a
  inc (hl)      ;684b
  ld a,(hl)     ;684c
  inc hl      ;684d
  inc hl      ;684e
  inc hl      ;684f
  jr nz,l686fh    ;6850
  push hl     ;6852
  ld (0f23dh),hl    ;6853
  ex de,hl      ;6856
  inc hl      ;6857
  ld e,(hl)     ;6858
  inc hl      ;6859
  ld d,(hl)     ;685a
  ld hl,00100h    ;685b
  call BDOS_27 ;sub_47b2h    ;685e
  ld e,l      ;6861
  ld d,h      ;6862
  dec h     ;6863
  ld a,l      ;6864
  or h      ;6865
  pop hl      ;6866
  jr z,l686fh   ;6867
  push hl     ;6869
  add hl,de     ;686a
  ld (hl),01ah    ;686b
  pop hl      ;686d
  xor a     ;686e
l686fh:
  ld c,a      ;686f
  ld b,000h   ;6870
  add hl,bc     ;6872
  ld a,(hl)     ;6873
l6874h:
  ld b,a      ;6874
  sub 01ah    ;6875
  sub 001h    ;6877
  ld a,b      ;6879
  pop hl      ;687a
  inc hl      ;687b
  inc hl      ;687c
  inc hl      ;687d
  ld (hl),000h    ;687e
  ret nc      ;6880
  ld (hl),a     ;6881
  ret     ;6882

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

hBackUp:
  ei      ;6883
  push hl     ;6884
  ld a,(0f348h)   ;6885
  add a,a     ;6888
  ld hl,00008h    ;6889
  jr nc,l6890h    ;688c
  ld l,010h   ;688e
l6890h:
  add hl,sp     ;6890
  ld (hl),041h    ;6891
  inc hl      ;6893
  ld (hl),06eh    ;6894
  pop hl      ;6896
  inc hl      ;6897
  inc hl      ;6898
  inc hl      ;6899
  ld (hl),c     ;689a
  ret     ;689b

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

hFileOut1:
  ld ix,0f38bh    ;689c
  ld iy,00800h    ;68a0
  call InitBasFCB ;sub_6671h    ;68a4
  ld a,(hl)     ;68a7
  cp 002h   ;68a8
  jp nz,071a7h    ;68aa
  pop af      ;68ad
  push af     ;68ae
  call FilePutChar ;sub_68b5h    ;68af
  jp RetABDH ;l66adh   ;68b2

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

FilePutChar: ;sub_68b5h:
  push hl     ;68b5
  ld bc,00006h    ;68b6
  add hl,bc     ;68b9
  ld c,(hl)     ;68ba
  inc (hl)      ;68bb
  inc hl      ;68bc
  inc hl      ;68bd
  inc hl      ;68be
  add hl,bc     ;68bf
  ld (hl),a     ;68c0
  pop hl      ;68c1
  ret nz      ;68c2
sub_68c3h:
  push hl     ;68c3
  inc hl      ;68c4
  ld e,(hl)     ;68c5
  inc hl      ;68c6
  ld d,(hl)     ;68c7
  ld bc,00004h    ;68c8
  add hl,bc     ;68cb
  ld a,(hl)     ;68cc
  inc hl      ;68cd
  inc hl      ;68ce
  inc hl      ;68cf
  ld (0f23dh),hl    ;68d0
  and a     ;68d3
  ld l,a      ;68d4
  ld h,b      ;68d5
  jr nz,l68d9h    ;68d6
  inc h     ;68d8
l68d9h:
  call WriteFileBuf ;sub_719dh    ;68d9
  pop hl      ;68dc
  ret     ;68dd

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

hNotFile0:
  ld ix,0f38bh    ;68de
  ld iy,00400h    ;68e2
  call InitBasFCB ;sub_6671h    ;68e6
  pop hl      ;68e9
  ld a,(hl)     ;68ea
  sub 002h    ;68eb
  jr nz,l6902h    ;68ed
  push hl     ;68ef
  ld hl,0fcaeh    ;68f0
  cp (hl)     ;68f3
  ld (hl),a     ;68f4
  pop hl      ;68f5
  jr nz,l6902h    ;68f6
  ld (hl),004h    ;68f8
  ld a,01ah   ;68fa
  call FilePutChar ;sub_68b5h    ;68fc
  call nz,sub_68c3h   ;68ff
l6902h:
  push hl     ;6902
  inc hl      ;6903
  ld e,(hl)     ;6904
  inc hl      ;6905
  ld d,(hl)     ;6906
  call BDOS_10 ;sub_456fh    ;6907
  pop hl      ;690a
  push hl     ;690b
  ld de,00007h    ;690c
  add hl,de     ;690f
  ld (hl),d     ;6910
  ld l,d      ;6911
  ld h,d      ;6912
  ld (0f864h),hl    ;6913
  pop hl      ;6916
  inc (hl)      ;6917
  dec (hl)      ;6918
  ld (hl),d     ;6919
  pop hl      ;691a
  ret     ;691b

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

hBinSave:
  call RetModify ;sub_7388h    ;691c
  push hl     ;691f
  ld ix,054f7h    ;6920
  call BasicCall ;sub_7326h    ;6924
  ld a,0ffh   ;6927
  call WrByt1 ;sub_69d5h    ;6929
  ld hl,(0f676h)    ;692c
  ld (0f23dh),hl    ;692f
  ex de,hl      ;6932
  ld hl,(0f6c2h)    ;6933
  and a     ;6936
  sbc hl,de   ;6937
  call WrBloadBuf ;sub_7199h    ;6939
  ld (0f87ch),a   ;693c
  pop hl      ;693f
  ld ix,06b24h    ;6940
  jp BasicCall ;sub_7326h    ;6944

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

hBinLoad:
  ld ix,0739ah    ;6947
  ld iy,00200h    ;694b
  call InitBasFCB ;sub_6671h    ;694f
  pop af      ;6952
  jp z,071a7h   ;6953
  ld ix,06c1ch    ;6956
  call BasicCall ;sub_7326h    ;695a
  ld hl,(0f353h)    ;695d
  push hl     ;6960
  call FCBinitOPEN ;sub_680ch    ;6961
  pop hl      ;6964
  push hl     ;6965
  ld bc,00013h    ;6966
  add hl,bc     ;6969
  ld a,(hl)     ;696a
  and a     ;696b
  jp nz,.450 ;07305h    ;696c
  dec hl      ;696f
  or (hl)     ;6970
  jp nz,.450 ;07305h    ;6971
  dec hl      ;6974
  ld d,(hl)     ;6975
  dec hl      ;6976
  ld e,(hl)     ;6977
  ld hl,(0f676h)    ;6978
  add hl,de     ;697b
  jp c,.450 ;07305h   ;697c
  ld bc,00093h    ;697f
  add hl,bc     ;6982
  jp c,.450 ;07305h   ;6983
  sbc hl,sp   ;6986
  jp nc,.450 ;07305h    ;6988
  ex de,hl      ;698b
  ex (sp),hl      ;698c
  ex de,hl      ;698d
  call RdOneByte ;sub_69deh    ;698e
  ld hl,(0f676h)    ;6991
  ld (0f23dh),hl    ;6994
  pop hl      ;6997
  dec hl      ;6998
  call BDOS_27 ;sub_47b2h    ;6999
  ld de,(0f676h)    ;699c
  add hl,de     ;69a0
  ld (0f6c2h),hl    ;69a1
  ld ix,04253h    ;69a4
  call BasicCall ;sub_7326h    ;69a8
  ld a,(0f866h)   ;69ab
  and a     ;69ae
  ret nz      ;69af
  ld (0f87ch),a   ;69b0
  ld hl,T6975 ;l69c7h    ;69b3
  ld de,0f568h    ;69b6
  ld bc,00005h    ;69b9
  push de     ;69bc
  ldir    ;69bd
  pop hl      ;69bf
  ld ix,04601h    ;69c0
  jp BasicCall ;sub_7326h    ;69c4
T6975:  db  ':',92h,0,0,0

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

Write16bit: ;sub_69cch:
  push hl     ;69cc
  ld a,l      ;69cd
  call WrOneByte ;sub_69d9h    ;69ce
  pop hl      ;69d1
  ld a,h      ;69d2
  jr WrOneByte ;sub_69d9h    ;69d3
WrByt1: ;sub_69d5h:
  ld de,(0f353h)    ;69d5
WrOneByte: ;sub_69d9h:
  ld bc,BDOS_26 ;l47beh    ;69d9
  jr l69e1h   ;69dc

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

RdOneByte: ;sub_69deh:
  ld bc,BDOS_27 ;sub_47b2h   ;69de
l69e1h:
  push af     ;69e1
  ld hl,00001h    ;69e2
  add hl,sp     ;69e5
  ld (0f23dh),hl    ;69e6
  push de     ;69e9
  call OneBlock ;sub_69f0h    ;69ea
  pop de      ;69ed
  pop af      ;69ee
  ret     ;69ef

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Read/write one block
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

OneBlock: ;sub_69f0h:
  ld hl,00001h    ;69f0
  push bc     ;69f3
  ret     ;69f4

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BASIC: BSAVE handler
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BSAVE_HND:
  push de     ;69f5
  call ScanBasInt ;sub_6b78h    ;69f6
  ld (0fcbfh),de    ;69f9
  push de     ;69fd
  call ScanBasInt ;sub_6b78h    ;69fe
  ld (0f87dh),de    ;6a01
  ex (sp),hl      ;6a05
  ex de,hl      ;6a06
  rst 20h     ;6a07
  jp c,.521 ;0731dh   ;6a08
  ex de,hl      ;6a0b
  ex (sp),hl      ;6a0c
  call CHRGTR ;sub_72e5h    ;6a0d
  db  '7'
  jr z,l6a29h   ;6a11
  call SYNCHR ;sub_72dbh    ;6a13
  db  ','
  cp 053h  ;'S' ;6a17
  jr nz,l6a21h    ;6a19
  call BASCHR ;sub_72e6h    ;6a1b
  and a     ;6a1e
  jr l6a29h   ;6a1f
l6a21h:
  call GetBasNumb ;sub_6b7ch    ;6a21
  ld (0fcbfh),de    ;6a24
  scf     ;6a28
l6a29h:
  pop bc      ;6a29
  jr nc,l6a31h    ;6a2a
  inc b     ;6a2c
  dec b     ;6a2d
  jp p,.521 ;0731dh   ;6a2e
l6a31h:
  pop de      ;6a31
  push hl     ;6a32
  push bc     ;6a33
  push af     ;6a34
  xor a     ;6a35
  ld e,002h   ;6a36
  ld ix,06afah    ;6a38
  call BasicCall ;sub_7326h    ;6a3c
  ld a,0feh   ;6a3f
  call WrByt1 ;sub_69d5h    ;6a41
  pop af      ;6a44
  pop hl      ;6a45
  push hl     ;6a46
  push af     ;6a47
  call Write16bit ;sub_69cch    ;6a48
  ld hl,(0f87dh)    ;6a4b
  call Write16bit ;sub_69cch    ;6a4e
  ld hl,(0fcbfh)    ;6a51
  call Write16bit ;sub_69cch    ;6a54
  pop af      ;6a57
  pop bc      ;6a58
  push af     ;6a59
  ld (0f23dh),bc    ;6a5a
  ld hl,(0f87dh)    ;6a5e
  and a     ;6a61
  sbc hl,bc   ;6a62
  inc hl      ;6a64
  pop af      ;6a65
  jr nc,l6a7bh    ;6a66
  call WrBloadBuf ;sub_7199h    ;6a68
l6a6bh:
  ld a,0ffh   ;6a6b
  ld (0fcaeh),a   ;6a6d
  xor a     ;6a70
  ld ix,06b24h    ;6a71
  call BasicCall ;sub_7326h    ;6a75
  jp l6f06h   ;6a78
l6a7bh:
  call sub_7173h    ;6a7b
l6a7eh:
  push hl     ;6a7e
  ld de,(0fcbfh)    ;6a7f
  rst 20h     ;6a83
  push af     ;6a84
  ld c,l      ;6a85
  ld b,h      ;6a86
  ld hl,(0f87dh)    ;6a87
  push hl     ;6a8a
  add hl,bc     ;6a8b
  ld (0f87dh),hl    ;6a8c
  pop hl      ;6a8f
  ld de,(0f23dh)    ;6a90
  call 00059h   ;6a94
  pop af      ;6a97
  jr nc,l6aach    ;6a98
  pop hl      ;6a9a
  push hl     ;6a9b
  call WrBloadBuf ;sub_7199h    ;6a9c
  ld hl,(0fcbfh)    ;6a9f
  pop de      ;6aa2
  and a     ;6aa3
  sbc hl,de   ;6aa4
  ld (0fcbfh),hl    ;6aa6
  ex de,hl      ;6aa9
  jr l6a7eh   ;6aaa
l6aach:
  pop hl      ;6aac
  ld hl,(0fcbfh)    ;6aad
  call WrBloadBuf ;sub_7199h    ;6ab0
  jr l6a6bh   ;6ab3

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BASIC: BLOAD handler
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BLOAD_HND:
  push de     ;6ab5
  xor a     ;6ab6
  ld (0fcbeh),a   ;6ab7
  ld c,a      ;6aba
  ld b,a      ;6abb
  call CHRGTR ;sub_72e5h    ;6abc
  jr z,l6adeh   ;6abf
  call SYNCHR ;sub_72dbh    ;6ac1
  inc l     ;6ac4
  cp 052h   ;6ac5
  jr z,l6acdh   ;6ac7
  cp 053h   ;6ac9
  jr nz,l6ad9h    ;6acb
l6acdh:
  ld (0fcbeh),a   ;6acd
  call BASCHR ;sub_72e6h    ;6ad0
  jr z,l6adeh   ;6ad3
  call SYNCHR ;sub_72dbh    ;6ad5
  inc l     ;6ad8
l6ad9h:
  call GetBasNumb ;sub_6b7ch    ;6ad9
  ld b,d      ;6adc
  ld c,e      ;6add
l6adeh:
  pop de      ;6ade
  push hl     ;6adf
  push bc     ;6ae0
  ld a,0ffh   ;6ae1
  ld (0fcaeh),a   ;6ae3
  xor a     ;6ae6
  ld e,001h   ;6ae7
  ld ix,06afah    ;6ae9
  call BasicCall ;sub_7326h    ;6aed
  ld de,(0f353h)    ;6af0
  call RdOneByte ;sub_69deh    ;6af4
  cp 0feh   ;6af7
  jp nz,071a7h    ;6af9
  pop bc      ;6afc
  call ReadWord ;sub_6b6ah    ;6afd
  push hl     ;6b00
  call ReadWord ;sub_6b6ah    ;6b01
  push hl     ;6b04
  call ReadWord ;sub_6b6ah    ;6b05
  ld (0fcbfh),hl    ;6b08
  pop hl      ;6b0b
  pop bc      ;6b0c
  and a     ;6b0d
  sbc hl,bc   ;6b0e
  inc hl      ;6b10
  ld (0f23dh),bc    ;6b11
  ld a,(0fcbeh)   ;6b15
  cp 053h   ;6b18
  jr z,l6b28h   ;6b1a
  call BDOS_27 ;sub_47b2h    ;6b1c
l6b1fh:
  ld ix,04affh    ;6b1f
  call BasicCall ;sub_7326h    ;6b23
  pop hl      ;6b26
  ret     ;6b27
l6b28h:
  call sub_7173h    ;6b28
l6b2bh:
  push hl     ;6b2b
  ld de,(0fcbfh)    ;6b2c
  rst 20h     ;6b30
  push af     ;6b31
  ld de,(0f353h)    ;6b32
  call BDOS_27 ;sub_47b2h    ;6b36
  pop af      ;6b39
  pop bc      ;6b3a
  push bc     ;6b3b
  push af     ;6b3c
  ld hl,(0f87dh)    ;6b3d
  push hl     ;6b40
  add hl,bc     ;6b41
  ld (0f87dh),hl    ;6b42
  pop de      ;6b45
  ld hl,(0f23dh)    ;6b46
  pop af      ;6b49
  jr nc,l6b5ch    ;6b4a
  call 0005ch   ;6b4c
  ld hl,(0fcbfh)    ;6b4f
  pop de      ;6b52
  and a     ;6b53
  sbc hl,de   ;6b54
  ld (0fcbfh),hl    ;6b56
  ex de,hl      ;6b59
  jr l6b2bh   ;6b5a
l6b5ch:
  pop bc      ;6b5c
  ld bc,(0fcbfh)    ;6b5d
  call 0005ch   ;6b61
  xor a     ;6b64
  ld (0fcbeh),a   ;6b65
  jr l6b1fh   ;6b68

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

ReadWord: ;sub_6b6ah:
  push bc     ;6b6a
  call RdOneByte ;sub_69deh    ;6b6b
  push af     ;6b6e
  call RdOneByte ;sub_69deh    ;6b6f
  ld h,a      ;6b72
  pop af      ;6b73
  ld l,a      ;6b74
  pop bc      ;6b75
  add hl,bc     ;6b76
  ret     ;6b77

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

ScanBasInt: ;sub_6b78h:
  call SYNCHR ;sub_72dbh    ;6b78
  inc l     ;6b7b
GetBasNumb: ;sub_6b7ch:
  ld ix,06f0bh    ;6b7c
  jp BasicCall ;sub_7326h    ;6b80

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Sector input
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

_DSKI$:
  call RetModify ;sub_7388h    ;6b83
  call BASCHR ;sub_72e6h    ;6b86
  call SYNCHR ;sub_72dbh    ;6b89
  db  '('
  call  SecParms
  call SYNCHR ;sub_72dbh    ;6b90
  db  ')'
  push hl     ;6b94
  ld hl,03fd6h    ;6b95
  ld (0f7f8h),hl    ;6b98
  pop hl      ;6b9b
  ld a,003h   ;6b9c
  ld (0f663h),a   ;6b9e
  and a     ;6ba1
  jr l6bafh   ;6ba2

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Sector output
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

_DSKO$:
  call RetModify ;sub_7388h    ;6ba4
  call SecParms ;sub_6bd3h    ;6ba7
  call CHRGTR ;sub_72e5h    ;6baa
  ret nz      ;6bad
  scf     ;6bae
l6bafh:
  push af     ;6baf
  push hl     ;6bb0
  push de     ;6bb1
  ld e,c      ;6bb2
  call BDOS_1B ;sub_505dh    ;6bb3
  inc a     ;6bb6
  jp z,071aah   ;6bb7
  pop de      ;6bba
  pop hl      ;6bbb
  pop af      ;6bbc
  push hl     ;6bbd
  ld a,0ffh   ;6bbe
  ld (0f246h),a   ;6bc0
  ld a,(ix+000h)    ;6bc3
  ld b,001h   ;6bc6
  ld c,(ix+001h)    ;6bc8
  ld hl,(0f351h)    ;6bcb
  call 00144h   ;6bce
  pop hl      ;6bd1
  ret     ;6bd2

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Get sector parametres
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

SecParms: ;sub_6bd3h:
  ld ix,0521ch    ;6bd3
  call BasicCall ;sub_7326h    ;6bd7
  push de     ;6bda
  call SYNCHR ;sub_72dbh    ;6bdb
  inc l     ;6bde
  ld ix,0542fh    ;6bdf
  call BasicCall ;sub_7326h    ;6be3
  pop bc      ;6be6
  ret     ;6be7

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Get information from disk
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

hDiskGET:
  ld ix,0f38bh    ;6be8
  ld iy,00400h    ;6bec
  call InitBasFCB ;sub_6671h    ;6bf0
  ld a,(hl)     ;6bf3
  cp 004h   ;6bf4
  jp nz,071a7h    ;6bf6
  inc hl      ;6bf9
  ld e,(hl)     ;6bfa
  inc hl      ;6bfb
  ld d,(hl)     ;6bfc
  ld bc,00007h    ;6bfd
  add hl,bc     ;6c00
  ex (sp),hl      ;6c01
  call CHRGTR ;sub_72e5h    ;6c02
  jr z,l6c37h   ;6c05
  push de     ;6c07
  call SYNCHR ;sub_72dbh    ;6c08
  inc l     ;6c0b
  ld ix,04c64h    ;6c0c
  call BasicCall ;sub_7326h    ;6c10
  push hl     ;6c13
  call LI2DBL ;sub_6e09h    ;6c14
  ld a,c      ;6c17
  or b      ;6c18
  or l      ;6c19
  or h      ;6c1a
  jp z,.521 ;0731dh   ;6c1b
  ld a,c      ;6c1e
  or b      ;6c1f
  dec bc      ;6c20
  jr nz,l6c24h    ;6c21
  dec hl      ;6c23
l6c24h:
  ex de,hl      ;6c24
  pop hl      ;6c25
  ex (sp),hl      ;6c26
  push hl     ;6c27
  push de     ;6c28
  ld de,00021h    ;6c29
  add hl,de     ;6c2c
  pop de      ;6c2d
  ld (hl),c     ;6c2e
  inc hl      ;6c2f
  ld (hl),b     ;6c30
  inc hl      ;6c31
  ld (hl),e     ;6c32
  inc hl      ;6c33
  ld (hl),d     ;6c34
  pop de      ;6c35
  pop hl      ;6c36
l6c37h:
  ex (sp),hl      ;6c37
  ld (0f23dh),hl    ;6c38
  pop hl      ;6c3b
  pop af      ;6c3c
  push hl     ;6c3d
  and a     ;6c3e
  ld hl,T72B9 ;0730bh    ;6c3f
  ld bc,BDOS_27 ;sub_47b2h   ;6c42
  jr z,l6c4dh   ;6c45
  ld hl,071b3h    ;6c47
  ld bc,BDOS_26 ;l47beh    ;6c4a
l6c4dh:
  push hl     ;6c4d
  call OneBlock ;sub_69f0h    ;6c4e
  and a     ;6c51
  ret nz      ;6c52
  pop hl      ;6c53
  jp l6f06h   ;6c54

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BASIC: FIELD operator
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

_FIELD:
  call RetModify ;sub_7388h    ;6c57
  cp 023h  ;'#' ;6c5a
  call z,BASCHR ;sub_72e6h    ;6c5c
  ld ix,0521ch    ;6c5f
  call BasicCall ;sub_7326h    ;6c63
  jp z,.427 ;07320h   ;6c66
  push hl     ;6c69
  ld ix,06a6dh    ;6c6a
  call BasicCall ;sub_7326h    ;6c6e
  ld e,l      ;6c71
  ld d,h      ;6c72
  jp z,.475 ;07308h   ;6c73
  jp c,.521 ;0731dh   ;6c76
  ld a,(hl)     ;6c79
  cp 004h   ;6c7a
  jp nz,071a7h    ;6c7c
  inc hl      ;6c7f
  ld a,(hl)     ;6c80
  inc hl      ;6c81
  ld h,(hl)     ;6c82
  ld l,a      ;6c83
  ld bc,0000eh    ;6c84
  add hl,bc     ;6c87
  ld c,(hl)     ;6c88
  inc hl      ;6c89
  ld b,(hl)     ;6c8a
  ld (0f568h),bc    ;6c8b
  ld hl,00000h    ;6c8f
  ld (0f56ah),hl    ;6c92
  ld bc,00009h    ;6c95
  pop hl      ;6c98
l6c99h:
  ex de,hl      ;6c99
  add hl,bc     ;6c9a
  ex de,hl      ;6c9b
  ld a,(hl)     ;6c9c
  cp 02ch   ;6c9d
  ret nz      ;6c9f
  push de     ;6ca0
  ld ix,521bh    ;6ca1
  call BasicCall ;sub_7326h    ;6ca5
  push af     ;6ca8
  call SYNCHR ;sub_72dbh    ;6ca9
  ld b,c      ;6cac
  call SYNCHR ;sub_72dbh    ;6cad
  ld d,e      ;6cb0
  ld ix,05ea4h    ;6cb1
  call BasicCall ;sub_7326h    ;6cb5
  ld ix,05597h    ;6cb8
  call BasicCall ;sub_7326h    ;6cbc
  jp nz,.476 ;07302h    ;6cbf
  pop af      ;6cc2
  ex (sp),hl      ;6cc3
  push de     ;6cc4
  push hl     ;6cc5
  ld hl,(0f56ah)    ;6cc6
  ld c,a      ;6cc9
  ld b,000h   ;6cca
  add hl,bc     ;6ccc
  ld (0f56ah),hl    ;6ccd
  ex de,hl      ;6cd0
  ld hl,(0f568h)    ;6cd1
  rst 20h     ;6cd4
  jp c,.477 ;0730eh   ;6cd5
  pop de      ;6cd8
  pop hl      ;6cd9
  ld (hl),c     ;6cda
  inc hl      ;6cdb
  ld (hl),e     ;6cdc
  inc hl      ;6cdd
  ld (hl),d     ;6cde
  ld b,000h   ;6cdf
  pop hl      ;6ce1
  jr l6c99h   ;6ce2

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Assigment w/padding
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

_RSET:  db  0F6h    ;OR <d> opcode
_LSET:  scf
  call RetModify ;sub_7388h    ;6ce6
  push af     ;6ce9
  ld ix,05ea4h    ;6cea
  call BasicCall ;sub_7326h    ;6cee
  ld ix,05597h    ;6cf1
  call BasicCall ;sub_7326h    ;6cf5
  jp nz,.476 ;07302h    ;6cf8
  push de     ;6cfb
  ld ix,04c5fh    ;6cfc
  call BasicCall ;sub_7326h    ;6d00
  pop bc      ;6d03
  ex (sp),hl      ;6d04
  push hl     ;6d05
  push bc     ;6d06
  ld ix,067d0h    ;6d07
  call BasicCall ;sub_7326h    ;6d0b
  ld b,(hl)     ;6d0e
  ex (sp),hl      ;6d0f
  ld a,(hl)     ;6d10
  ld c,a      ;6d11
  push bc     ;6d12
  push hl     ;6d13
  push af     ;6d14
  inc hl      ;6d15
  ld e,(hl)     ;6d16
  inc hl      ;6d17
  ld d,(hl)     ;6d18
  or a      ;6d19
  jr z,l6d78h   ;6d1a
  ld hl,(0f862h)    ;6d1c
  dec hl      ;6d1f
  rst 20h     ;6d20
  jr c,l6d56h   ;6d21
  ld hl,(0f6c2h)    ;6d23
  rst 20h     ;6d26
  jr c,l6d56h   ;6d27
  ld e,c      ;6d29
  ld d,000h   ;6d2a
  ld hl,(0f674h)    ;6d2c
  add hl,de     ;6d2f
  ex de,hl      ;6d30
  ld hl,(0f69bh)    ;6d31
  rst 20h     ;6d34
  jr c,l6d8bh   ;6d35
  pop af      ;6d37
l6d38h:
  ld a,c      ;6d38
  ld ix,0668eh    ;6d39
  call BasicCall ;sub_7326h    ;6d3d
  pop hl      ;6d40
  pop bc      ;6d41
  ex (sp),hl      ;6d42
  push de     ;6d43
  push bc     ;6d44
  ld ix,067d0h    ;6d45
  call BasicCall ;sub_7326h    ;6d49
  pop bc      ;6d4c
  pop de      ;6d4d
  ex (sp),hl      ;6d4e
  push bc     ;6d4f
  push hl     ;6d50
  inc hl      ;6d51
  push af     ;6d52
  ld (hl),e     ;6d53
  inc hl      ;6d54
  ld (hl),d     ;6d55
l6d56h:
  pop af      ;6d56
  pop hl      ;6d57
  inc hl      ;6d58
  ld e,(hl)     ;6d59
  inc hl      ;6d5a
  ld d,(hl)     ;6d5b
  pop bc      ;6d5c
  pop hl      ;6d5d
  inc hl      ;6d5e
  ld a,(hl)     ;6d5f
  inc hl      ;6d60
  ld h,(hl)     ;6d61
  ld l,a      ;6d62
  ld a,c      ;6d63
  cp b      ;6d64
  jr nc,l6d68h    ;6d65
  ld b,a      ;6d67
l6d68h:
  sub b     ;6d68
  ld c,a      ;6d69
  pop af      ;6d6a
  call nc,PadSP ;sub_6d82h   ;6d6b
  inc b     ;6d6e
l6d6fh:
  dec b     ;6d6f
  jr z,l6d7dh   ;6d70
  ld a,(hl)     ;6d72
  ld (de),a     ;6d73
  inc hl      ;6d74
  inc de      ;6d75
  jr l6d6fh   ;6d76
l6d78h:
  pop bc      ;6d78
  pop bc      ;6d79
  pop bc      ;6d7a
  pop bc      ;6d7b
  pop bc      ;6d7c
l6d7dh:
  call c,PadSP ;sub_6d82h    ;6d7d
  pop hl      ;6d80
  ret     ;6d81
PadSP: ;sub_6d82h:
  ld a,020h  ;' ' ;6d82
  inc c     ;6d84
l6d85h:
  dec c     ;6d85
  ret z     ;6d86
  ld (de),a     ;6d87
  inc de      ;6d88
  jr l6d85h   ;6d89
l6d8bh:
  pop af      ;6d8b
  pop hl      ;6d8c
  pop bc      ;6d8d
  ex (sp),hl      ;6d8e
  ex de,hl      ;6d8f
  jr nz,l6db7h    ;6d90
  push bc     ;6d92
  ld a,b      ;6d93
  ld ix,06627h    ;6d94
  call BasicCall ;sub_7326h    ;6d98
  ld de,0f698h    ;6d9b
  ld hl,(0f678h)    ;6d9e
  ld (0f7f8h),hl    ;6da1
  ld a,003h   ;6da4
  ld (0f663h),a   ;6da6
  call 02ef3h   ;6da9
  ld de,0f69bh    ;6dac
  rst 20h     ;6daf
  ld (0f678h),hl    ;6db0
  jp z,.368 ;l72ffh   ;6db3
  pop bc      ;6db6
l6db7h:
  ex (sp),hl      ;6db7
  push bc     ;6db8
  push hl     ;6db9
  jp l6d38h   ;6dba

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; MKI, MKS, MKD functions
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

_MKI$:  ld  a,2
  db  1
_MKS$:  ld  a,4
  db  1
_MKD$:  ld  a,8
  call RetModify ;sub_7388h    ;6dc5
  push af     ;6dc8
  ld ix,0517ah    ;6dc9
  call BasicCall ;sub_7326h    ;6dcd
  pop af      ;6dd0
  ld ix,06627h    ;6dd1
  call BasicCall ;sub_7326h    ;6dd5
  ld hl,(0f699h)    ;6dd8
  call 02f10h   ;6ddb
  jp l6203h   ;6dde
  db  0,0,0,0

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; CVI, CVS, CVD functions
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

_CVI: ld  a,1
  db  1
_CVS: ld  a,3
  db  1
_CVD: ld  a,7
  call RetModify ;sub_7388h    ;6ded
  push af     ;6df0
  ld ix,067d0h    ;6df1
  call BasicCall ;sub_7326h    ;6df5
  pop af      ;6df8
  cp (hl)     ;6df9
  jp nc,.521 ;0731dh    ;6dfa
  inc a     ;6dfd
  inc hl      ;6dfe
  ld c,(hl)     ;6dff
  inc hl      ;6e00
  ld h,(hl)     ;6e01
  ld l,c      ;6e02
  ld (0f663h),a   ;6e03
  jp 02f08h   ;6e06

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Convert long int to DBL
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

LI2DBL: ;sub_6e09h:
  ld ix,05597h    ;6e09
  call BasicCall ;sub_7326h    ;6e0d
  ld bc,(0f7f8h)    ;6e10
  ld hl,00000h    ;6e14
  ret m     ;6e17
  jp z,.476 ;07302h   ;6e18
  ld hl,0f7f6h    ;6e1b
  ld de,0f5fch    ;6e1e
  ld bc,00008h    ;6e21
  ldir    ;6e24
  ld hl,$65536 ;l6e76h    ;6e26
  ld de,0f847h    ;6e29
  ld c,008h   ;6e2c
  ldir    ;6e2e
  call 0289fh   ;6e30
  and a     ;6e33
  call 030d1h   ;6e34
  ld ix,05432h    ;6e37
  call BasicCall ;sub_7326h    ;6e3b
  push de     ;6e3e
  ex de,hl      ;6e3f
  ld ix,046ffh    ;6e40
  call BasicCall ;sub_7326h    ;6e44
  call 03042h   ;6e47
  ld bc,06545h    ;6e4a
  ld de,06053h    ;6e4d
  call 0325ch   ;6e50
  ld hl,0f7f6h    ;6e53
  ld de,0f847h    ;6e56
  ld bc,00008h    ;6e59
  ldir    ;6e5c
  ld hl,0f5fch    ;6e5e
  ld de,0f7f6h    ;6e61
  ld c,008h   ;6e64
  ldir    ;6e66
  call 0268ch   ;6e68
  ld ix,05432h    ;6e6b
  call BasicCall ;sub_7326h    ;6e6f
  ld c,e      ;6e72
  ld b,d      ;6e73
  pop hl      ;6e74
  ret     ;6e75
;
$65536: db  45h,65h,53h,60h,00h,00h,00h,00h
;
;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; EOF() function
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

_EOF:
  call RetModify ;sub_7388h    ;6e7e
  push hl     ;6e81
  call ReadCharacter ;sub_6838h    ;6e82
  ld hl,00000h    ;6e85
  jr nc,l6e8bh    ;6e88
  dec hl      ;6e8a
l6e8bh:
  push af     ;6e8b
  call 02f99h   ;6e8c
  pop af      ;6e8f
  pop hl      ;6e90
  inc hl      ;6e91
  inc hl      ;6e92
  inc hl      ;6e93
  ld (hl),a     ;6e94
l6e95h:
  ret     ;6e95

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

_FILES:
  call RetModify ;sub_7388h    ;6e96
  ld d,000h   ;6e99
  jr z,l6ea3h   ;6e9b
  call ChekEmptyFCB ;sub_6f8eh    ;6e9d
  push hl     ;6ea0
  jr l6ea7h   ;6ea1
l6ea3h:
  push hl     ;6ea3
  call AllFiles ;sub_700ch    ;6ea4
l6ea7h:
  call set_fcb_d ;sub_6f71h    ;6ea7
  ld a,(0f416h)   ;6eaa
  and a     ;6ead
  push af     ;6eae
  call FileFind ;sub_6653h    ;6eaf
  jp z,.432 ;l7319h+1   ;6eb2
  ld ix,07323h    ;6eb5
  call BasicCall ;sub_7326h    ;6eb9
l6ebch:
  ld hl,0f5b3h    ;6ebc
  ld b,00bh   ;6ebf
l6ec1h:
  ld a,(hl)     ;6ec1
  inc hl      ;6ec2
  rst 18h     ;6ec3
  ld a,b      ;6ec4
  cp 004h   ;6ec5
  jr nz,l6ed1h    ;6ec7
l6ec9h:
  ld a,(hl)     ;6ec9
  cp 020h   ;6eca
  jr z,l6ed0h   ;6ecc
  ld a,02eh   ;6ece
l6ed0h:
  rst 18h     ;6ed0
l6ed1h:
  djnz l6ec1h   ;6ed1
  call 000bdh   ;6ed3
  pop af      ;6ed6
  push af     ;6ed7
  ld a,(0f3b0h)   ;6ed8
  ld b,a      ;6edb
  ld a,(0f661h)   ;6edc
  jr z,l6ee6h   ;6edf
  ld b,050h   ;6ee1
  ld a,(0f415h)   ;6ee3
l6ee6h:
  and a     ;6ee6
  jr z,l6ef8h   ;6ee7
  add a,00ch    ;6ee9
  cp b      ;6eeb
  jr nc,l6ef1h    ;6eec
  ld a,020h   ;6eee
  rst 18h     ;6ef0
l6ef1h:
  ld ix,07328h  ;6ef1 
  call nc,BasicCall ;sub_7326h   ;6ef5
l6ef8h:
  ld de,0f568h    ;6ef8
  xor a     ;6efb
  ld (0f574h),a   ;6efc
  call BDOS_12 ;sub_5006h    ;6eff
  inc a     ;6f02
  jr nz,l6ebch    ;6f03
  pop af      ;6f05
l6f06h:
  pop hl      ;6f06
  ld ix,04affh    ;6f07
  jp BasicCall ;sub_7326h    ;6f0b

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

_KILL:
  call RetModify ;sub_7388h    ;6f0e
  call SetupFCB ;sub_6fa4h    ;6f11
  call CHRGTR ;sub_72e5h    ;6f14
  ret nz      ;6f17
  call MakeFCB ;sub_65f8h    ;6f18
  jp z,071adh   ;6f1b
  call set_fcb_d ;sub_6f71h    ;6f1e
  push hl     ;6f21
  ld de,0f568h    ;6f22
  call BDOS_13 ;sub_436ch    ;6f25
  and a     ;6f28
  jp nz,.432 ;l7319h+1    ;6f29
  pop hl      ;6f2c
  ret     ;6f2d

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BASIC: rename handler (NAME)
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

_RENAME:
  call RetModify ;sub_7388h    ;6f2e
  call SetupFCB ;sub_6fa4h    ;6f31
  call MakeFCB ;sub_65f8h    ;6f34
  jp z,071adh   ;6f37
  call set_fcb_d ;sub_6f71h    ;6f3a
  push hl     ;6f3d
  call FileFind ;sub_6653h    ;6f3e
  jp z,.432 ;l7319h+1   ;6f41
  pop hl      ;6f44
  call SYNCHR ;sub_72dbh    ;6f45
  db  'A'
  call SYNCHR ;sub_72dbh    ;6f49
  db  'S'
  call SetupFCB ;sub_6fa4h    ;6f4d
  ld a,d      ;6f50
  ld (0f578h),a   ;6f51
  push hl     ;6f54
  ld hl,(0f568h)    ;6f55
  and a     ;6f58
  jr z,l6f5fh   ;6f59
  cp l      ;6f5b
  jp nz,071c2h    ;6f5c
l6f5fh:
  ld de,0f579h    ;6f5f
  call MovFCBup ;sub_6668h    ;6f62
  ld de,0f568h    ;6f65
  call BDOS_17 ;sub_4392h    ;6f68
  and a     ;6f6b
  jp nz,071b0h    ;6f6c
  pop hl      ;6f6f
  ret     ;6f70

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Set drive code in FCB
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

set_fcb_d: ;sub_6f71h:
  call GetDevNo ;sub_65f1h    ;6f71
  inc a     ;6f74
  ld (0f568h),a   ;6f75
  push hl     ;6f78
  push de     ;6f79
  call MoveFCB ;sub_6665h    ;6f7a
  pop de      ;6f7d
  pop hl      ;6f7e
  ret     ;6f7f

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GetFCBDriveNo: ;sub_6f80h:
  ld ix,06a0eh    ;6f80
  call BasicCall ;sub_7326h    ;6f84
  ld a,d      ;6f87
  cp 009h   ;6f88
  ret c     ;6f8a
  jp 071aah   ;6f8b

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Convert "" to "*.*"
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

ChekEmptyFCB: ;sub_6f8eh:
  call GetFCBDriveNo ;sub_6f80h    ;6f8e
  push hl     ;6f91
  ld hl,0f866h    ;6f92
  ld b,00bh   ;6f95
l6f97h:
  ld a,(hl)     ;6f97
  inc hl      ;6f98
  cp 020h   ;6f99
  jr nz,l6fa8h    ;6f9b
  djnz l6f97h   ;6f9d
  call AllFiles ;sub_700ch    ;6f9f
  jr l6fa8h   ;6fa2

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Setup FCB for basic
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

SetupFCB: ;sub_6fa4h:
  call GetFCBDriveNo ;sub_6f80h    ;6fa4
  push hl     ;6fa7
l6fa8h:
  ld hl,0f866h    ;6fa8
  ld b,008h   ;6fab
  call GetFCBpart ;sub_7003h    ;6fad
  ld b,003h   ;6fb0
  call GetFCBpart ;sub_7003h    ;6fb2
  pop hl      ;6fb5
  or 037h   ;6fb6
  push de     ;6fb8
  push hl     ;6fb9
  ld de,0f866h    ;6fba
  push de     ;6fbd
  ld b,00bh   ;6fbe
l6fc0h:
  push bc     ;6fc0
  ld a,(de)     ;6fc1
  ld hl,$f_delim ;l6fdah    ;6fc2
  ld bc,0000dh    ;6fc5
  jr c,l6fcbh   ;6fc8
  dec bc      ;6fca
l6fcbh:
  cpir    ;6fcb
  jr z,l7000h   ;6fcd
  pop bc      ;6fcf
  inc de      ;6fd0
  djnz l6fc0h   ;6fd1
  pop hl      ;6fd3
  call S6F95 ;06fe7h   ;6fd4
  pop hl      ;6fd7
  pop de      ;6fd8
  ret     ;6fd9

$f_delim:
  db  '."/\[]:+=;,*?'

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

S6F95:  ld  a,' '
  cp  (hl)
  jr z,l7000h   ;6fea
  ld b,007h   ;6fec
  call Pad_HL ;sub_6ff3h    ;6fee
  ld b,003h   ;6ff1
Pad_HL: ;sub_6ff3h:
  inc hl      ;6ff3
  cp (hl)     ;6ff4
  jr z,l6ffah   ;6ff5
  djnz Pad_HL ;sub_6ff3h    ;6ff7
  ret     ;6ff9
l6ffah:
  dec b     ;6ffa
  ret z     ;6ffb
  inc hl      ;6ffc
  cp (hl)     ;6ffd
  jr z,l6ffah   ;6ffe
l7000h:
  jp .512 ;07317h   ;7000

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GetFCBpart: ;sub_7003h:
  ld a,(hl)     ;7003
  cp 02ah   ;7004
  jr z,l7011h   ;7006
  inc hl      ;7008
  djnz GetFCBpart ;sub_7003h    ;7009
  ret     ;700b

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

AllFiles: ;sub_700ch:
  ld hl,0f866h    ;700c
  ld b,00bh   ;700f
l7011h:
  ld (hl),03fh    ;7011
  inc hl      ;7013
  djnz l7011h   ;7014
  ret     ;7016

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

_LOF: ld  bc,10h
  db  11h
_LOC: ld  bc,21h
  call RetModify ;sub_7388h    ;701e
  push bc     ;7021
  ld ix,0521fh    ;7022
  call BasicCall ;sub_7326h    ;7026
  ld ix,06a6dh    ;7029
  call BasicCall ;sub_7326h    ;702d
  jp c,.521 ;0731dh   ;7030
  jp z,.475 ;07308h   ;7033
  pop bc      ;7036
  inc hl      ;7037
  ld e,(hl)     ;7038
  inc hl      ;7039
  ld d,(hl)     ;703a
  ex de,hl      ;703b
  add hl,bc     ;703c
  ld c,(hl)     ;703d
  inc hl      ;703e
  ld b,(hl)     ;703f
  inc hl      ;7040
  ld e,(hl)     ;7041
  inc hl      ;7042
  ld d,(hl)     ;7043
  ex de,hl      ;7044
  push bc     ;7045
  ld ix,046ffh    ;7046
  call BasicCall ;sub_7326h    ;704a
  ld bc,06545h    ;704d
  ld de,06053h    ;7050
  call 0325ch   ;7053
  ld hl,0f7f6h    ;7056
  ld de,0f847h    ;7059
  ld bc,00008h    ;705c
  ldir    ;705f
  pop hl      ;7061
  ld ix,046ffh    ;7062
  call BasicCall ;sub_7326h    ;7066
  call 03042h   ;7069
  jp 0269ah   ;706c

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; 
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

_DSKF:
  call RetModify ;sub_7388h    ;706f
  ld ix,0521fh    ;7072
  call BasicCall ;sub_7326h    ;7076
  ld hl,0f347h    ;7079
  cp (hl)     ;707c
  jr z,l7082h   ;707d
  jp nc,071aah    ;707f
l7082h:
  ld e,a      ;7082
  call BDOS_1B ;sub_505dh    ;7083
  jp 02f99h   ;7086

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BASIC: COPY operator
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

_COPY:
  call RetModify ;sub_7388h    ;7089
  call ChekEmptyFCB ;sub_6f8eh    ;708c
  call MakeFCB ;sub_65f8h    ;708f
  jp z,071adh   ;7092
  call set_fcb_d ;sub_6f71h    ;7095
  push hl     ;7098
  ld a,(0f247h)   ;7099
  inc a     ;709c
  ld (0f58dh),a   ;709d
  ld hl,0f569h    ;70a0
  ld de,0f58eh    ;70a3
  ld bc,00024h    ;70a6
  ldir    ;70a9
  pop hl      ;70ab
  call CHRGTR ;sub_72e5h    ;70ac
  jr z,l70d1h   ;70af
  call SYNCHR ;sub_72dbh    ;70b1
  exx     ;70b4
  call ChekEmptyFCB ;sub_6f8eh    ;70b5
  call MakeFCB ;sub_65f8h    ;70b8
  jp z,071adh   ;70bb
  call GetDevNo ;sub_65f1h    ;70be
  inc a     ;70c1
  ld (0f58dh),a   ;70c2
  push hl     ;70c5
  ld de,0f58eh    ;70c6
  call MovFCBup ;sub_6668h    ;70c9
  pop hl      ;70cc
  call CHRGTR ;sub_72e5h    ;70cd
  ret nz      ;70d0
l70d1h:
  push hl     ;70d1
  call FileFind ;sub_6653h    ;70d2
  jp z,.432 ;l7319h+1   ;70d5
CopyLoop: ;l70d8h:
  call 000bdh   ;70d8
  ld bc,0f58dh    ;70db
  ld de,0f5d7h    ;70de
  ld hl,0f5b2h    ;70e1
  ld a,00ch   ;70e4
l70e6h:
  push af     ;70e6
  ld a,(bc)     ;70e7
  cp 03fh   ;70e8
  jr nz,l70edh    ;70ea
  ld a,(hl)     ;70ec
l70edh:
  ld (de),a     ;70ed
  inc bc      ;70ee
  inc de      ;70ef
  inc hl      ;70f0
  pop af      ;70f1
  dec a     ;70f2
  jr nz,l70e6h    ;70f3
  ld hl,0f5b2h    ;70f5
  ld de,0f5d7h    ;70f8
  ld b,00ch   ;70fb
l70fdh:
  ld a,(de)     ;70fd
  cp (hl)     ;70fe
  jr nz,l7108h    ;70ff
  inc hl      ;7101
  inc de      ;7102
  djnz l70fdh   ;7103
  jp .521 ;0731dh   ;7105
l7108h:
  call sub_717ah    ;7108
  push hl     ;710b
  xor a     ;710c
  ld (0f5beh),a   ;710d
  ld de,0f5b2h    ;7110
  call BDOS_0F ;sub_4462h    ;7113
  ld de,0f5d7h    ;7116
  call BDOS_16 ;sub_461dh    ;7119
  or a      ;711c
  jp nz,071b6h    ;711d
  ld l,a      ;7120
  ld h,a      ;7121
  ld (0f5d3h),hl    ;7122
  ld (0f5d5h),hl    ;7125
  ld (0f5f8h),hl    ;7128
  ld (0f5fah),hl    ;712b
  inc l     ;712e
  ld (0f5c0h),hl    ;712f
  ld (0f5e5h),hl    ;7132
  pop hl      ;7135
l7136h:
  push hl     ;7136
  ld de,0f5b2h    ;7137
  call BDOS_27 ;sub_47b2h    ;713a
  ld a,l      ;713d
  or h      ;713e
  jr z,l714ah   ;713f
  ld de,0f5d7h    ;7141
  call WriteFileBuf ;sub_719dh    ;7144
  pop hl      ;7147
  jr l7136h   ;7148
l714ah:
  pop hl      ;714a
  ld hl,(0f5c6h)    ;714b
  ld (0f5ebh),hl    ;714e
  ld hl,(0f5c8h)    ;7151
  ld (0f5edh),hl    ;7154
  ld de,0f5d7h    ;7157
  call BDOS_10 ;sub_456fh    ;715a
  ld hl,0f5b2h    ;715d
  ld (0f23dh),hl    ;7160
  ld de,0f568h    ;7163
  xor a     ;7166
  ld (0f574h),a   ;7167
  call BDOS_12 ;sub_5006h    ;716a
  inc a     ;716d
  jp nz,CopyLoop ;l70d8h    ;716e
  pop hl      ;7171
  ret     ;7172
sub_7173h:
  ld (0fcbfh),hl    ;7173
  ld (0f87dh),bc    ;7176
sub_717ah:
  ld hl,0fe00h    ;717a
  add hl,sp     ;717d
  jr nc,l718dh    ;717e
  ld de,(0f6c6h)    ;7180
  and a     ;7184
  sbc hl,de   ;7185
  jr c,l718dh   ;7187
  ld a,h      ;7189
  and a     ;718a
  jr nz,l7194h    ;718b
l718dh:
  ld de,(0f862h)    ;718d
  ld hl,00100h    ;7191
l7194h:
  ld (0f23dh),de    ;7194
  ret     ;7198

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Write some buffer
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

WrBloadBuf: ;sub_7199h:
  ld de,(0f353h)    ;7199
WriteFileBuf: ;sub_719dh:
  call BDOS_26 ;l47beh   ;719d
  and a     ;71a0
  ret z     ;71a1
  jr $+17   ;71a2

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Error generators
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

l71a4h:
  ld  e,3Ch ;Bad FAT
  db  1
  ld  e,3Dh ;Bad file mode
  db  1
  ld  e,3Eh ;Bad drive name
  db  1
  ld  e,40h ;bad sector no
  db  1
  ld  e,41h ;file open
  db  1
  ld  e,42h ;file exists
  db  1
  ld  e,43h ;disk full
  db  1
e_68:  ld  e,44h ;to many files
  db  1
e_69:  ld  e,45h ;write protect
  db  1
e_70:  ld  e,46h ;disk io
  db  1
  ld  e,47h ;disk o
  ld bc,00000h    ;71c4
  xor a     ;71c7
  ld (0f87ch),a   ;71c8
  ld (0fcaeh),a   ;71cb
  push de     ;71ce
  ld ix,06b24h    ;71cf
  call BasicCall ;sub_7326h    ;71d3
  pop de      ;71d6
  ld ix,0406fh    ;71d7
  jp BasicCall ;sub_7326h    ;71db

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Error printer
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

hERRP:
  ei      ;71de
  ld a,e      ;71df
  sub 03ch    ;71e0
  ret c     ;71e2
  cp 00ch   ;71e3
  ret nc      ;71e5
  inc a     ;71e6
  ld b,a      ;71e7
  ld hl,$x_err ;l7200h    ;71e8
l71ebh:
  ld a,(hl)     ;71eb
  and a     ;71ec
  inc hl      ;71ed
  jr nz,l71ebh    ;71ee
  djnz l71ebh   ;71f0
  dec hl      ;71f2
  ld de,0f604h    ;71f3
  push de     ;71f6
  ld bc,00016h    ;71f7
  ldir    ;71fa
  ld e,001h   ;71fc
  pop hl      ;71fe
  ret     ;71ff
;
$x_err: db  0
$e_bf:  db  'Bad FAT',0
$e_bfm: db  'Bad file mode',0
$e_bdn: db  'Bad drive name',0
$e_bsn: db  'Bad sector number',0
$e_fso: db  'File still open',0
$e_exi: db  'File already exists',0
$e_df:  db  'Disk full',0
$e_2mf: db  'Too many files',0
$e_dwp: db  'Disk write protected',0
$e_dio: db  'Disk I/O error',0
$e_ofl: db  'Disk offline',0
$e_rad: db  'Rename across disk',0
;
pBasEH:
  dw  BasicErrHandler
BasicErrHandler: ;l72bbh:
  bit 7,c   ;72bb
  jp nz,l71a4h    ;72bd
  res 0,c   ;72c0
  ld b,000h   ;72c2
  ld hl,Tab2er ;l72cdh    ;72c4
  add hl,bc     ;72c7
l72c8h:
  ld a,(hl)     ;72c8
  inc hl      ;72c9
  ld h,(hl)     ;72ca
  ld l,a      ;72cb
  jp (hl)     ;72cc
;
Tab2er: dw  e_68
  dw  e_70
  dw  e_69
  dw  e_69
  dw  e_69
  dw  e_69
  dw  e_69

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; BASIC text parsers
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

SYNCHR: ;sub_72dbh:
  call CHRGTR ;sub_72e5h    ;72db
  ex (sp),hl      ;72de
  cp (hl)     ;72df
  jr nz,.427 ;$+64    ;72e0
  inc hl      ;72e2
  ex (sp),hl      ;72e3
  inc hl      ;72e4
CHRGTR: ;sub_72e5h:
  dec hl      ;72e5
BASCHR: ;sub_72e6h:
  ld ix,04666h    ;72e6
  jr BasicCall ;sub_7326h    ;72ea
;
ResRuHook:
  ld a,0c9h   ;72ec
  ld (0fed5h),a   ;72ee
  ld de,(0fc4ah)    ;72f1
  ld (0f349h),de    ;72f5
  ret     ;72f9
T72A8: ;l72fah:
  rst 30h     ;72fa
  nop     ;72fb
  dw  ResRuHook
  ret

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; More error generators
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

.368: ld  e,10h
  db  1
.476: ld  e,0Dh
  db  1
.450: ld  e,7
  db  1
.475: ld  e,3Bh
  db  1
T72B9:  ld  e,37h
  db  1
.477: ld  e,32h
  db  1
.428: ld  e,36h
  db  1
.430: ld  e,34h
  db  1
.512: ld  e,38h
  db  1
.432: ld  e,35h
  db  1
.521: ld  e,5
  db  1
.427: ld  e,2

  ld ix,0406fh    ;7322
BasicCall: ;sub_7326h:
  call 00159h   ;7326
  ei      ;7329
  ret     ;732a

hParDev:
  ei      ;732b
  push hl     ;732c
  push de     ;732d
  ld a,(0f348h)   ;732e
  add a,a     ;7331
  ld hl,00010h    ;7332
  jr nc,l7339h    ;7335
  ld l,018h   ;7337
l7339h:
  add hl,sp     ;7339
  ld e,(hl)     ;733a
  inc hl      ;733b
  ld d,(hl)     ;733c
  push hl     ;733d
  ld hl,06e95h    ;733e
  rst 20h     ;7341
  pop hl      ;7342
  jr z,l7352h   ;7343
  push hl     ;7345
  ld hl,06ec9h    ;7346
  rst 20h     ;7349
  pop hl      ;734a
  jr nz,l7358h    ;734b
  ld de,0f377h    ;734d
  jr l7355h   ;7350
l7352h:
  ld de,0f37ah    ;7352
l7355h:
  ld (hl),d     ;7355
  dec hl      ;7356
  ld (hl),e     ;7357
l7358h:
  pop de      ;7358
  pop hl      ;7359
  ld a,e      ;735a
  cp 002h   ;735b
  ret c     ;735d
  ld a,(hl)     ;735e
  cp 03ah   ;735f
  jr z,$-74   ;7361
  inc hl      ;7363
  ld a,(hl)     ;7364
  cp 03ah   ;7365
  dec hl      ;7367
  ret nz      ;7368
  call RetModify ;sub_7388h    ;7369
  ld a,(hl)     ;736c
  and 0dfh    ;736d
  sub 040h    ;736f
  push hl     ;7371
  ld hl,0f347h    ;7372
  cp (hl)     ;7375
  pop hl      ;7376
  jr z,l737ch   ;7377
  jp nc,071aah    ;7379
l737ch:
  inc hl      ;737c
  inc hl      ;737d
  dec e     ;737e
  dec e     ;737f
  push de     ;7380
  inc e     ;7381
  pop de      ;7382
  ret     ;7383

hNoDevName:
  ei      ;7384
  ld a,000h   ;7385
  ret     ;7387

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Avoid 'Illegal function call'
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

RetModify: ;sub_7388h:
  ei      ;7388
  push hl     ;7389
  push af     ;738a
  ld a,(0f348h)   ;738b
  add a,a     ;738e
  ld hl,0000ch    ;738f
  jr nc,l7396h    ;7392
  ld l,014h   ;7394
l7396h:
  add hl,sp     ;7396
  ld (hl),08bh    ;7397
  inc hl      ;7399
  ld (hl),0f3h    ;739a
  pop af      ;739c
  pop hl      ;739d
  ret     ;739e

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Transferred to upper memory
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

DiskHiRes: ;l739fh:
  call 0f36bh   ;739f
  ld a,(de)     ;73a2
  call 0f368h   ;73a3
  inc de      ;73a6
  cp 024h   ;73a7
  ret z     ;73a9
  call Char2CON ;sub_53a8h    ;73aa
  jr DiskHiRes ;l739fh   ;73ad
  call 0f36bh   ;73af
  ldir    ;73b2
  call 0f368h   ;73b4
  ret     ;73b7
  call 0f36bh   ;73b8
  jp 00000h   ;73bb
  ld de,0f1deh    ;73be
  push de     ;73c1
  ld e,(hl)     ;73c2
  inc hl      ;73c3
  ld d,(hl)     ;73c4
  ex de,hl      ;73c5
  call 0f36bh   ;73c6
  jp (hl)     ;73c9
  jp ConvertFCB ;l5604h   ;73ca
  db  'PRN LST NUL AUX CON            ',80h,0,0,0,0,0,0,0,0,0,0,0
  db  0,0,0,0,0,0,0,0,0,1Fh,1Ch,1Fh,1Eh,1Fh,1Eh,1Fh,1Fh,1Eh,1Fh,1Eh
  db  1Fh

;ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
;ЫЫ                                                                        ЫЫ
;ЫЫ             Multi-FAT swapper                                          ЫЫ
;ЫЫ             (C) 1992, SOLID                                            ЫЫ
;ЫЫ                                                                        ЫЫ
;ЫЫ                                                                        ЫЫ
;ЫЫ                                                                        ЫЫ
;ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ

FAT_read: ;sub_740dh:
  ld a,h      ;740d
  or l      ;740e
  jp nz,GETFAT ;sub_41f4h   ;740f
  ld hl,(0fd09h)    ;7412
  ret     ;7415

NewGetFAT: ;l7416h:
  call 0f252h   ;7416
  call FAT_Swapper ;sub_743bh    ;7419
  ld a,(ix+00fh)    ;741c
  cp 010h   ;741f
  jp nc,l759dh    ;7421
  jp OldGetFAT ;sub_41fdh    ;7424

FAT_write: ;sub_7427h:
  ld a,h      ;7427
  or l      ;7428
  jr nz,NewPutFAT ;sub_7430h   ;7429
  ld (0fd09h),bc    ;742b
  ret     ;742f

NewPutFAT: ;sub_7430h:
  call FAT_Swapper ;sub_743bh    ;7430
  dec de      ;7433
  ld a,001h   ;7434
  ld (de),a     ;7436
  inc de      ;7437
  jp l4221h   ;7438

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

FAT_Swapper: ;sub_743bh:
  push hl     ;743b
  ld hl,(0ffdbh)    ;743c ;Is this FAT in common buffer
  ld e,(ix+013h)    ;743f
  ld d,(ix+014h)    ;7442
  or a      ;7445
  sbc hl,de   ;7446
  pop hl      ;7448
  ret nz      ;7449        ;No -> do no swapping
  ld a,(0ffd9h)   ;744a    ;Is current's drive FAT buffered?
  cp (ix+000h)    ;744d
  jr z,l7457h   ;7450
  call SWAFAT ;sub_7477h    ;7452  ;if no -> swap immediately
  jr l7463h   ;7455
l7457h:
  call sub_75a5h    ;7457
  push hl     ;745a
  ld hl,0ffdah    ;745b
  cp (hl)     ;745e
  pop hl      ;745f          ;compare to block # in buffer
  call nz,SWAFAT ;sub_7477h   ;7460  ;If no match -> swap FATS
l7463h:
  ld a,(ix+00fh)    ;7463
  cp 010h   ;7466
  ld a,h      ;7468
  jr nc,l746fh    ;7469
  and 003h    ;746b
  ld h,a      ;746d         ;mask FAT entry addres to block size
  ret     ;746e
l746fh:
  sub 003h    ;746f
  jr nc,l746fh    ;7471
  add a,003h    ;7473
  ld h,a      ;7475
  ret     ;7476

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Swapping FAT buffers
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

SWAFAT: ;sub_7477h:
  push hl     ;7477
  call SaveFATbuf ;sub_74dah    ;7478
  pop hl      ;747b
ReadFATbuf: ;sub_747ch:
  ld a,(ix+000h)    ;747c
  ld (0ffd9h),a   ;747f      ;FAT's drive
  call sub_75a5h    ;7482
  ld (0ffdah),a   ;7485      ;FAT's block no
  push hl     ;7488
  push de     ;7489
  push bc     ;748a
  call GetFATbuf ;sub_45fah    ;748b
  ld b,a      ;748e
  ld a,(0ffdah)   ;748f
  ld c,a      ;7492
  add a,a     ;7493
  add a,c     ;7494
  add a,e     ;7495
  ld e,a      ;7496
  jr nc,l749ah    ;7497
  inc d     ;7499
l749ah:
  push hl     ;749a
  push de     ;749b
  push bc     ;749c
  ld b,003h   ;749d
  call DiskReadSect ;sub_74bdh    ;749f
  pop bc      ;74a2
  pop de      ;74a3
  pop hl      ;74a4
  jr nc,l74b9h    ;74a5
  ld a,(ix+010h)    ;74a7
  add a,e     ;74aa
  ld e,a      ;74ab
  jr nc,l74afh    ;74ac
  inc d     ;74ae
l74afh:
  djnz l749ah   ;74af
  call GetFATbuf ;sub_45fah    ;74b1
  ld b,003h   ;74b4
  call DOS_abs_read ;sub_46c5h    ;74b6
l74b9h:
  pop bc      ;74b9
  pop de      ;74ba
  pop hl      ;74bb
  ret     ;74bc
;
DiskReadSect: ;sub_74bdh:
  call 0f270h   ;74bd
  ld a,(ix+000h)    ;74c0
  ld c,(ix+001h)    ;74c3
  jp ReadSector_all ;sub_6070h    ;74c6
;
NewUpdateFAT: ;sub_74c9h:
  push de     ;74c9
  ld e,(ix+013h)    ;74ca
  ld d,(ix+014h)    ;74cd
  ld hl,(0ffdbh)    ;74d0
  or a      ;74d3
  sbc hl,de   ;74d4
  pop de      ;74d6
  jp nz,l7532h    ;74d7
SaveFATbuf: ;sub_74dah:
  push bc     ;74da
  push de     ;74db
  push ix   ;74dc
  ld a,(0ffd9h)   ;74de
  call GetDPBptr ;sub_4564h    ;74e1
  ld c,(hl)     ;74e4
  inc hl      ;74e5
  ld b,(hl)     ;74e6
  push bc     ;74e7
  pop ix    ;74e8
  call GetFATbuf ;sub_45fah    ;74ea
  ld b,a      ;74ed
  dec hl      ;74ee
  ld a,(hl)     ;74ef
  ld (hl),000h    ;74f0
  inc hl      ;74f2
  cp 001h   ;74f3
  jp nz,l752dh    ;74f5
  ld a,(0ffdah)   ;74f8
  ld c,a      ;74fb
  add a,a     ;74fc
  add a,c     ;74fd
  add a,e     ;74fe
  ld e,a      ;74ff
  jr nc,l7503h    ;7500
  inc d     ;7502
l7503h:
  push de     ;7503
  push bc     ;7504
  push hl     ;7505
  ld a,(0ffdah)   ;7506
  ld b,a      ;7509
  add a,a     ;750a
  add a,b     ;750b
  ld b,a      ;750c
  ld a,(ix+010h)    ;750d
  sub b     ;7510
  jr z,l752dh   ;7511
  cp 003h   ;7513
  ld b,a      ;7515
  jr c,l751ah   ;7516
  ld b,003h   ;7518
l751ah:
  ld a,(ix+000h)    ;751a
  call DOS_Abs_write ;l4755h   ;751d
  pop hl      ;7520
  pop bc      ;7521
  pop de      ;7522
  ld a,e      ;7523
  add a,(ix+010h)   ;7524
  ld e,a      ;7527
  jr nc,l752bh    ;7528
  inc d     ;752a
l752bh:
  djnz l7503h   ;752b
l752dh:
  pop ix    ;752d
  pop de      ;752f
  pop bc      ;7530
  ret     ;7531
;
l7532h:  call GetFATbuf ;sub_45fah    ;7532
l7535h:  push af     ;7535
  push ix   ;7536
  push hl     ;7538
  push de     ;7539
  push bc     ;753a
  ld a,(ix+000h)    ;753b
  ld c,(ix+001h)    ;753e
  call DOS_Abs_write ;l4755h   ;7541
  pop bc      ;7544
  pop de      ;7545
  ld a,e      ;7546
  add a,b     ;7547
  ld e,a      ;7548
  ld a,000h   ;7549
  adc a,d     ;754b
  ld d,a      ;754c
  pop hl      ;754d
  pop ix    ;754e
  pop af      ;7550
  dec a     ;7551
  jr nz,l7535h    ;7552
  ret     ;7554
;
l7555h:  ld a,(0ffd9h)   ;7555
  cp (ix+000h)    ;7558
  call nz,SaveFATbuf ;sub_74dah   ;755b
  ld a,(0f2e1h)   ;755e
  call ReadFATbuf ;sub_747ch    ;7561
  ld l,(ix+013h)    ;7564
  ld h,(ix+014h)    ;7567
  dec hl      ;756a
  ld (hl),000h    ;756b
  jp DPB_change_entry ;l4526h   ;756d
;ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ

;ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ

sub_7570h:
  ld a,(ix+00fh)    ;7570
  cp 010h   ;7573
  jr nc,l757fh    ;7575
  ld a,h      ;7577
  cp 00fh   ;7578
l757ah:
  ret c     ;757a
  ld a,l      ;757b
  cp 0f7h   ;757c
  ret     ;757e
l757fh:
  ld a,h      ;757f
  cp 0ffh   ;7580
  jr l757ah   ;7582
l7584h:
  push de     ;7584
  ld e,l      ;7585
  ld d,h      ;7586
  ld a,(ix+00fh)    ;7587
  cp 010h   ;758a
  jp c,l7596h   ;758c
  add hl,de     ;758f
  pop de      ;7590
  add hl,de     ;7591
  ld (hl),c     ;7592
  inc hl      ;7593
  ld (hl),b     ;7594
  ret     ;7595
l7596h:
  ld a,b      ;7596
  and 00fh    ;7597
  ld b,a      ;7599
  jp PutFAT ;l4224h   ;759a
l759dh:
  add hl,hl     ;759d
  add hl,de     ;759e
  ld a,(hl)     ;759f
  inc hl      ;75a0
  ld h,(hl)     ;75a1
  ld l,a      ;75a2
  or h      ;75a3
  ret     ;75a4
sub_75a5h:
  ld a,(ix+00fh)    ;75a5
  cp 010h   ;75a8
  jr nc,l75b2h    ;75aa
  ld a,h      ;75ac
  rra     ;75ad
  rra     ;75ae
  and 003h    ;75af
  ret     ;75b1
l75b2h:
  ld a,h      ;75b2
  push bc     ;75b3
  ld c,0ffh   ;75b4
l75b6h:
  inc c     ;75b6
  sub 003h    ;75b7
  jr nc,l75b6h    ;75b9
  ld a,c      ;75bb
  pop bc      ;75bc
  ret     ;75bd
l75beh:
  ld c,000h   ;75be
  dec b     ;75c0
  jr z,l75c8h   ;75c1
l75c3h:
  add hl,hl     ;75c3
  rl c    ;75c4
  djnz l75c3h   ;75c6
l75c8h:
  or l      ;75c8
  ld l,a      ;75c9
  ld a,c      ;75ca
  ld c,(ix+00ch)    ;75cb
  ld b,(ix+00dh)    ;75ce
  add hl,bc     ;75d1
  adc a,000h    ;75d2
  pop bc      ;75d4
  ret z     ;75d5
  ld (0fd0dh),hl    ;75d6
  ld l,a      ;75d9
  ld h,000h   ;75da
  ld (0fd0fh),hl    ;75dc
  ld hl,0ffffh    ;75df
  ret     ;75e2

sub_75e3h:
  ld a,e      ;75e3
  and d     ;75e4
  inc a     ;75e5
  jr z,l75efh   ;75e6
  ld hl,(0f23fh)    ;75e8
  or a      ;75eb
  sbc hl,de   ;75ec
  ret     ;75ee

l75efh:
  inc a     ;75ef
  scf     ;75f0
  ret     ;75f1

sub_75f2h:
  jr nc,l75f8h    ;75f2
  ld a,d      ;75f4
  and e     ;75f5
  inc a     ;75f6
  ret nz      ;75f7
l75f8h:
  ld a,0ffh   ;75f8
  ld (0f241h),a   ;75fa
  ret     ;75fd

;ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
;ЫЫ                                                                         ЫЫ
;ЫЫ          IDE Hard Disk (lowest level) Read/Write                        ЫЫ
;ЫЫ                                                                         ЫЫ
;ЫЫ                                                                         ЫЫ
;ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ

HDD_SectorIO: ;l75feh:
  ei      ;75fe
  push hl     ;75ff
  push de     ;7600
  push bc     ;7601
  push af     ;7602
  cp 004h   ;7603
  jr nc,l7642h    ;7605
  call GetWorkBuf ;sub_603ch    ;7607
  pop af      ;760a
  push af     ;760b
  ld e,a      ;760c
  add a,a     ;760d
  add a,a     ;760e
  add a,e     ;760f
  ld e,a      ;7610
  ld d,000h   ;7611
  add hl,de     ;7613
  push hl     ;7614
  pop ix    ;7615
  ld a,(ix+000h)    ;7617
  or (ix+001h)    ;761a
  or (ix+002h)    ;761d
  or (ix+003h)    ;7620
  jp z,l7642h   ;7623
  pop af      ;7626
  pop bc      ;7627
  pop de      ;7628
  pop hl      ;7629
l762ah:
  call Wait_HDD ;sub_78a5h    ;762a
  push bc     ;762d
  push de     ;762e
  push af     ;762f
  call SectorTrans ;sub_7ae9h    ;7630
  pop af      ;7633
  push af     ;7634
  call XFER_HDD ;sub_764eh    ;7635
  jr c,l764ah   ;7638
  pop af      ;763a
  pop de      ;763b
  inc de      ;763c
  pop bc      ;763d
  djnz l762ah   ;763e
  xor a     ;7640
  ret     ;7641
l7642h:
  pop bc      ;7642
  ld a,004h   ;7643
  scf     ;7645
  pop bc      ;7646
  pop de      ;7647
  pop hl      ;7648
  ret     ;7649
l764ah:
  pop bc      ;764a
  pop de      ;764b
  pop bc      ;764c
  ret     ;764d

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; HDD data transfer <=>
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

XFER_HDD: ;sub_764eh:
  jp c,hdd_wrsec ;l76b0h   ;764e
hdd_rdsec: ;sub_7651h:
  ld a,020h   ;7651
  out (030h),a    ;7653
  ld a,087h   ;7655
  out (032h),a    ;7657
  ld a,0c7h   ;7659
  out (032h),a    ;765b
  ld a,092h   ;765d
  out (033h),a    ;765f
l7661h:
  ld a,0c7h   ;7661
  out (032h),a    ;7663
  ld a,047h   ;7665
  out (032h),a    ;7667
  in a,(030h)   ;7669
  bit 7,a   ;766b
  jr nz,l7661h    ;766d
  bit 0,a   ;766f
  jp nz,l76f4h    ;7671
  bit 3,a   ;7674
  jr z,l7661h   ;7676
  ld a,0c7h   ;7678
  out (032h),a    ;767a
  ld a,0c0h   ;767c
  out (032h),a    ;767e
  or a      ;7680
  bit 7,h   ;7681
  push af     ;7683
  push hl     ;7684
  jr nz,l768ah    ;7685
  ld hl,(0f34dh)    ;7687
l768ah:
  ld c,030h   ;768a
  ld d,000h   ;768c
l768eh:
  ld a,040h   ;768e
  ld b,005h   ;7690
  out (032h),a    ;7692
  ini   ;7694
  inc c     ;7696
  ini   ;7697
  dec c     ;7699
  ld a,0c0h   ;769a
  out (032h),a    ;769c
  dec d     ;769e
  jr nz,l768eh    ;769f
  pop de      ;76a1
  pop af      ;76a2
  ret nz      ;76a3
  ld hl,(0f34dh)    ;76a4
  ld bc,00200h    ;76a7
  call 0f1d9h   ;76aa
  ex de,hl      ;76ad
  or a      ;76ae
  ret     ;76af

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Write sector
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

hdd_wrsec: ;l76b0h:
  ld a,030h   ;76b0
  out (030h),a    ;76b2
  ld a,087h   ;76b4
  out (032h),a    ;76b6
  ld a,0c7h   ;76b8
  out (032h),a    ;76ba
  ld b,030h   ;76bc
l76beh:
  ex (sp),hl      ;76be
  ex (sp),hl      ;76bf
  djnz l76beh   ;76c0
  ld a,0c0h   ;76c2
  out (032h),a    ;76c4
  push hl     ;76c6
  bit 7,h   ;76c7
  jr nz,l76d8h    ;76c9
  ld de,(0f34dh)    ;76cb
  ld bc,00200h    ;76cf
  call 0f1d9h   ;76d2
  ld hl,(0f34dh)    ;76d5
l76d8h:
  ld c,030h   ;76d8
  ld d,000h   ;76da
l76dch:
  ld b,005h   ;76dc
  outi    ;76de
  inc c     ;76e0
  outi    ;76e1
  dec c     ;76e3
  ld a,080h   ;76e4
  out (032h),a    ;76e6
  ld a,0c0h   ;76e8
  out (032h),a    ;76ea
  dec d     ;76ec
  jr nz,l76dch    ;76ed
  pop hl      ;76ef
  inc h     ;76f0
  inc h     ;76f1
  xor a     ;76f2
  ret     ;76f3
l76f4h:
  ld a,0c1h   ;76f4   ;HDD I/O error recovery
  out (032h),a    ;76f6
  ld a,041h   ;76f8
  out (032h),a    ;76fa
  in a,(030h)   ;76fc
  ld c,a      ;76fe
  ld a,0c1h   ;76ff
  out (032h),a    ;7701
  ld a,008h   ;7703
  rr c    ;7705
  ret c     ;7707
  rr c    ;7708
  ret c     ;770a
  ld a,00ch   ;770b
  rr c    ;770d
  ret c     ;770f
  rr c    ;7710
  ld a,008h   ;7712
  rr c    ;7714
  ret c     ;7716
  rr c    ;7717
  ld a,004h   ;7719
  rr c    ;771b
  ret c     ;771d
  ld a,002h   ;771e
  scf     ;7720
  ret     ;7721

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Set DPB using sector 0
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

HDD_SetBPB: ;l7722h:
  ei      ;7722
  push hl     ;7723
  ld de,00000h    ;7724
  ld hl,(0f34dh)    ;7727
  ld b,001h   ;772a
  or a      ;772c
  call HDD_SectorIO ;l75feh   ;772d
  pop iy    ;7730
  ret c     ;7732
  ld ix,(0f34dh)    ;7733
  ld a,(ix+015h)    ;7737      get Media type
  ld (iy+001h),a    ;773a     MEDIA - Media type
  ld (iy+002h),000h   ;773d   SECSIZ - sectorsize_hi
  ld (iy+003h),002h   ;7741          - sectorsize_lo
  ld (iy+004h),00fh   ;7745   DIRMSK -  DirMsk (SECSIZ/32)-1
  ld (iy+005h),004h   ;7749   DIRSHFT - Number of one bits in DIRMSK
  ld a,(ix+00dh)    ;774d      get (Sectors per cluster)
  dec a     ;7750
  ld (iy+006h),a    ;7751     CLUSMSK - (Sectors per cluster)-1
  ld c,000h   ;7754
l7756h:
  inc c     ;7756
  rra     ;7757
  jr c,l7756h   ;7758
  ld (iy+007h),c    ;775a    CLUSSHFT - Number of one bits in CLUSMSK
  ld l,(ix+00eh)    ;775d      get Logical sector number of first FAT _hi
  ld h,(ix+00fh)    ;7760      get Logical sector number of first FAT _lo
  ld (iy+008h),l    ;7763    FIRFAT - Logical sector number of first FAT _hi
  ld (iy+009h),h    ;7766           - Logical sector number of first FAT _lo
  ld e,(ix+016h)    ;7769      get Number of sectors used per FAT
  ld (iy+010h),e    ;776c    FATSIZ - Number of sectors used per FAT
  ld d,000h   ;776f
  ld b,(ix+010h)    ;7771      get Number of FATs
  ld (iy+00ah),b    ;7774    FATCNT - Number of FATs
l7777h:
  add hl,de     ;7777        FIRFAT+FATSIZ, and B=FATCNT
  djnz l7777h   ;7778
  ld (iy+011h),l    ;777a    FIRDIR - Logical sector number of start of directory _hi
  ld (iy+012h),h    ;777d           - Logical sector number of start of directory _lo
  ld a,(ix+012h)    ;7780
  ex de,hl      ;7783        save DE ?
  ld h,a      ;7784
  ld l,(ix+011h)    ;7785
  ld bc,0000fh    ;7788
  add hl,bc     ;778b
  add hl,hl     ;778c
  add hl,hl     ;778d
  add hl,hl     ;778e
  add hl,hl     ;778f
  ld l,h      ;7790
  ld h,000h   ;7791
  ex de,hl      ;7793         restore DE ?
  jr z,l779ah   ;7794
  ld a,0ffh   ;7796
  jr l779dh   ;7798
l779ah:
  ld a,(iy+011h)    ;779a     get Number of directory entries ?
l779dh:
  ld (iy+00bh),a    ;779d   MAXENT - Number of directory entries (Max=254)
  add hl,de     ;77a0       FATSIZ(DE)+?
  ld e,(ix+01ch)    ;77a1   get Logical sector number of boot record?
  ld d,(ix+01dh)    ;77a4
  add hl,de     ;77a7
  ld (iy+00ch),l    ;77a8   FIRREC - Logical sector number of where the data area starts _hi
  ld (iy+00dh),h    ;77ab          - Logical sector number of where the data area starts _lo
  ex de,hl      ;77ae
  ld l,(ix+013h)    ;77af
  ld h,(ix+014h)    ;77b2
  ld bc,00000h    ;77b5
  ld a,l      ;77b8
  or h      ;77b9
  jr nz,l77c8h    ;77ba
  ld l,(ix+020h)    ;77bc
  ld h,(ix+021h)    ;77bf
  ld c,(ix+022h)    ;77c2
  ld b,(ix+023h)    ;77c5
l77c8h:
  or a      ;77c8
  sbc hl,de   ;77c9
  jr nc,l77ceh    ;77cb
  dec bc      ;77cd
l77ceh:
  ld a,(iy+007h)    ;77ce
l77d1h:
  dec a     ;77d1
  jr z,l77deh   ;77d2
  srl b   ;77d4
  rr c    ;77d6
  rr h    ;77d8
  rr l    ;77da
  jr l77d1h   ;77dc
l77deh:
  inc hl      ;77de
  ld (iy+00eh),l    ;77df  MAXCLUS - (Number of clusters on drive _hi   [not include reserved sectors, 
  ld (iy+00fh),h    ;77e2          - Number of clusters on drive _hi)+1  FAT sectors or directory sectors]
  xor a     ;77e5
  ret     ;77e6

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Default DPB pattern
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ
DEFAULT_DPB:
  db  0F9h   ;MEDIA
  dw  0200h  ;SECSIZ
  db  0Fh    ;DIRMSK
  db  04h    ;DIRSHFT
  db  03h    ;CLUSMSK
  db  03h    ;CLUSSHFT
  dw  0001h  ;FIRFAT
  db  02h    ;FATCNT
  db  70h    ;MAXENT
  dw  0Eh    ;FIRREC
  dw  02CAh  ;MAXCLUS
  db  03h    ;FATSIZ
  dw  7      ;FIRDIR
  db  0D0h,02h

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Choice for FORMAT - no choice
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

HDD_Choice: ;l77fbh:
  xor a     ;77fb
  ld l,a      ;77fc
  ld h,a      ;77fd
  ret     ;77fe

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Disk change - NO CHANGE
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

HDD_DiskChg: ;l77ffh:
  push af     ;77ff
  call GetWorkBuf ;sub_603ch    ;7800
  pop af      ;7803
  cp (ix+014h)    ;7804
  ld (ix+014h),a    ;7807
  jr nz,l7810h    ;780a
  ld b,001h   ;780c
  xor a     ;780e
  ret     ;780f
l7810h:
  ld b,0ffh   ;7810
  xor a     ;7812
  ret     ;7813

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; format removed for ROM space freeing
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

HDD_Format: ;l7814h:
  call PrintMsg ;sub_6000h    ;7814
  db  13,'Use HPREP utility to format',02ch
  db  13,10,'and test your HDD',02eh,0
  ret     ;7849

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Initialize Hard Disk
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

HDD_StopMotor: ;l784ah:
  di      ;784a
  ld hl,00000h    ;784b
  ld a,092h   ;784e
  out (033h),a    ;7850
l7852h:
  ld a,0c7h   ;7852
  out (032h),a    ;7854
  ex (sp),hl      ;7856
  ex (sp),hl      ;7857
  ex (sp),hl      ;7858
  ex (sp),hl      ;7859
  ex (sp),hl      ;785a
  ex (sp),hl      ;785b
  ld a,047h   ;785c
  out (032h),a    ;785e
  in a,(030h)   ;7860
  or a      ;7862
  jp p,l786fh   ;7863
  dec hl      ;7866
  ld a,h      ;7867
  or l      ;7868
  jp nz,l7852h    ;7869
  scf     ;786c
  ei      ;786d
  ret     ;786e
l786fh:
  ld a,0e7h   ;786f
  out (032h),a    ;7871
  xor a     ;7873
  ei      ;7874
  ret     ;7875

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Get HDD's sectors & heads
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

InitFileSystem: ;sub_7876h:
  ld hl,02000h    ;7876
l7879h:
  dec hl      ;7879
  ld a,h      ;787a
  or l      ;787b
  jr nz,l7879h    ;787c
  call HDD_StopMotor ;l784ah   ;787e
  ret c     ;7881
  ld hl,0d000h    ;7882
  call IDE_Inf1 ;sub_7982h    ;7885
  ld a,(0d006h)   ;7888
  ld (0fd0ch),a   ;788b
  ld a,(0d00ch)   ;788e
  ld (0fd0bh),a   ;7891
l7894h:
  call OutputHDDLogo ;sub_79e3h    ;7894
  ld b,004h   ;7897
l7899h:
  ld hl,00000h    ;7899
l789ch:
  dec hl      ;789c
  ld a,h      ;789d
  or l      ;789e
l789fh:
  jr nz,l789ch    ;789f
  djnz l7899h   ;78a1
  xor a     ;78a3
  ret     ;78a4

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Wait for HDD ready
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

Wait_HDD: ;sub_78a5h:
  push af     ;78a5
  ld a,092h   ;78a6
  out (033h),a    ;78a8
l78aah:
  ld a,0c7h   ;78aa
  out (032h),a    ;78ac
  ld a,047h   ;78ae
  out (032h),a    ;78b0
  in a,(030h)   ;78b2
  and 0d0h    ;78b4
  cp 050h   ;78b6
  jp nz,l78aah    ;78b8    ;loop if BUSY flag set
  ld a,0f7h   ;78bb
  out (032h),a    ;78bd
  pop af      ;78bf
  ret     ;78c0

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Get maximal disk count
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

GetHardDiskCount: ;sub_78c1h:
  ld l,004h   ;78c1
  ret     ;78c3

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Hard Disk MASTER BOOT
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

MasterBoot: ;sub_78c4h:
  ld hl,09000h    ;78c4
  call ReadMBR ;sub_7abfh    ;78c7
  ret c     ;78ca
  ld a,(091feh)   ;78cb
  cp 055h   ;78ce
  ret nz      ;78d0
  ld a,(091ffh)   ;78d1
  cp 0aah   ;78d4
  ret nz      ;78d6
  call GetWorkBuf ;sub_603ch    ;78d7
  push hl     ;78da
  ld d,h      ;78db
  ld e,l      ;78dc
  inc de      ;78dd
  ld (hl),000h    ;78de
  ld bc,00014h    ;78e0
  ldir    ;78e3
  pop de      ;78e5
  ld hl,091beh    ;78e6
  ld bc,00400h    ;78e9
  ld a,001h   ;78ec
  ex af,af'     ;78ee
l78efh:
  ld a,(hl)     ;78ef
  cp 080h   ;78f0
  jr nz,l78f7h    ;78f2
  ex af,af'     ;78f4
  ld c,a      ;78f5
  ex af,af'     ;78f6
l78f7h:
  push bc     ;78f7
  inc hl      ;78f8
  inc hl      ;78f9
  inc hl      ;78fa
  inc hl      ;78fb
  ld a,(hl)     ;78fc
  cp 001h   ;78fd
  jr z,l7917h   ;78ff
  cp 004h   ;7901
  jr z,l7917h   ;7903
  cp 006h   ;7905
  jr z,l7917h   ;7907
  cp 00eh   ;7909
  jr z,l7917h   ;790b
  cp 082h   ;790d
  jr z,l7917h   ;790f
  ld bc,0000ch    ;7911
  add hl,bc     ;7914
  jr l792ch   ;7915
l7917h:
  inc hl      ;7917
  inc hl      ;7918
  inc hl      ;7919
  inc hl      ;791a
  ldi   ;791b
  ldi   ;791d
  ldi   ;791f
  ldi   ;7921
  ld (de),a     ;7923
  inc hl      ;7924
  inc hl      ;7925
  inc hl      ;7926
  inc hl      ;7927
  inc de      ;7928
  ex af,af'     ;7929
  inc a     ;792a
  ex af,af'     ;792b
l792ch:
  pop bc      ;792c
  djnz l78efh   ;792d
  ld (ix+014h),0ffh   ;792f
  ex af,af'     ;7933
  ld b,a      ;7934
  push ix   ;7935
  push bc     ;7937
  call GetMySlot ;l602dh   ;7938
  ld hl,0fb21h    ;793b
  ld b,a      ;793e
  ld c,000h   ;793f
l7941h:
  ld a,(hl)     ;7941
  add a,c     ;7942
  ld c,a      ;7943
  inc hl      ;7944
  ld a,(hl)     ;7945
  inc hl      ;7946
  cp b      ;7947
  jr nz,l7941h    ;7948
  dec hl      ;794a
  dec hl      ;794b
  ld a,c      ;794c
  sub (hl)      ;794d
  pop bc      ;794e
  ld (hl),b     ;794f
  add a,c     ;7950
  dec a     ;7951
  pop ix    ;7952
  ld (ix+015h),a    ;7954
  ret     ;7957

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Boot MSX-DOS from HDD
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

DOS_HDD_BOOT: ;sub_7958h:
  di      ;7958
  in a,(0aah)   ;7959
  and 0f0h    ;795b
  or 007h   ;795d
  out (0aah),a    ;795f
  nop     ;7961
  in a,(0a9h)   ;7962
  and 040h    ;7964    ;If [SELECT] do not boot 
  scf     ;7966
  ret z     ;7967
  call GetWorkBuf ;sub_603ch    ;7968
  ld a,(ix+015h)    ;796b
  ld (0f247h),a   ;796e
  ld bc,001f8h    ;7971
  ld hl,(0f351h)    ;7974
  ld de,00000h    ;7977
  or a      ;797a
  call 00144h   ;797b
  ld hl,(0f351h)    ;797e
  ret     ;7981
;
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

IDE_Inf1: ;sub_7982h:
  call Wait_HDD ;sub_78a5h    ;7982
  ld a,080h   ;7985
  out (033h),a    ;7987
  ld a,0c7h   ;7989
  out (032h),a    ;798b
  ld a,0ech   ;798d
  out (030h),a    ;798f
  ld a,087h   ;7991
  out (032h),a    ;7993
  ld a,0c7h   ;7995
  out (032h),a    ;7997
  ld a,092h   ;7999
  out (033h),a    ;799b
  ld a,0c7h   ;799d
  out (032h),a    ;799f
l79a1h:
  ld a,047h   ;79a1
  out (032h),a    ;79a3
  in a,(030h)   ;79a5
  ld c,a      ;79a7
  ld a,0c7h   ;79a8
  out (032h),a    ;79aa
  bit 7,c   ;79ac
  jr nz,l79a1h    ;79ae
  bit 0,c   ;79b0
  jr nz,l79d1h    ;79b2
  bit 3,c   ;79b4
  jr z,l79a1h   ;79b6
  ld c,030h   ;79b8
  ld d,000h   ;79ba
l79bch:
  ld a,040h   ;79bc
  ld b,005h   ;79be
  out (032h),a    ;79c0
  ini   ;79c2
  inc c     ;79c4
  ini   ;79c5
  dec c     ;79c7
  ld a,0f0h   ;79c8
  out (032h),a    ;79ca
  dec d     ;79cc
  jr nz,l79bch    ;79cd
  xor a     ;79cf
  ret     ;79d0
l79d1h:
  ld a,0c1h   ;79d1
  out (032h),a    ;79d3
  ld a,041h   ;79d5
  out (032h),a    ;79d7
  in a,(030h)   ;79d9
  ld c,a      ;79db
  ld a,0c1h   ;79dc
  out (032h),a    ;79de
  ld a,c      ;79e0
  scf     ;79e1
  ret     ;79e2

OutputHDDLogo: ;sub_79e3h:
  di      ;79e3
  push af     ;79e4
  push hl     ;79e5
  ld hl,$_logo ;l7a81h    ;79e6
  call sputc ;sub_7a78h    ;79e9
  ld c,04dh   ;79ec
  ld hl,(0d079h)    ;79ee
  ld a,(0d07bh)   ;79f1
  srl a   ;79f4
  rr h    ;79f6
  rr l    ;79f8
  srl a   ;79fa
  rr h    ;79fc
  rr l    ;79fe
  srl a   ;7a00
  rr h    ;7a02
  rr l    ;7a04
  or a      ;7a06
  jr z,l7a15h   ;7a07
  ld c,047h   ;7a09
  ld l,h      ;7a0b
  ld h,a      ;7a0c
  srl h   ;7a0d
  rr l    ;7a0f
  srl h   ;7a11
  rr l    ;7a13
l7a15h:
  call MakeDec ;sub_7a47h    ;7a15
  ld a,c      ;7a18
  call 000a2h   ;7a19
  ld a,020h   ;7a1c
  call 000a2h   ;7a1e
  call sub_7a3dh    ;7a21
  ld hl,0d02eh    ;7a24
  ld b,00ah   ;7a27
l7a29h:
  inc hl      ;7a29
  ld a,(hl)     ;7a2a
  call 000a2h   ;7a2b
  dec hl      ;7a2e
  ld a,(hl)     ;7a2f
  call 000a2h   ;7a30
  inc hl      ;7a33
  inc hl      ;7a34
  djnz l7a29h   ;7a35
  call sub_7a3dh    ;7a37
  pop hl      ;7a3a
  pop af      ;7a3b
  ret     ;7a3c
sub_7a3dh:
  ld a,00dh   ;7a3d
  call 000a2h   ;7a3f
  ld a,00ah   ;7a42
  jp 000a2h   ;7a44

MakeDec: ;sub_7a47h:
  ld b,010h   ;7a47
  ld de,00000h    ;7a49
  xor a     ;7a4c
l7a4dh:
  add hl,hl     ;7a4d
  ld a,e      ;7a4e
  adc a,a     ;7a4f
  daa     ;7a50
  ld e,a      ;7a51
  ld a,d      ;7a52
  adc a,a     ;7a53
  daa     ;7a54
  ld d,a      ;7a55
  djnz l7a4dh   ;7a56
  ld b,004h   ;7a58
  ld a,d      ;7a5a
  call sub_7a5fh    ;7a5b
  ld a,e      ;7a5e
sub_7a5fh:
  push af     ;7a5f
  rrca      ;7a60
  rrca      ;7a61
  rrca      ;7a62
  rrca      ;7a63
  call sub_7a68h    ;7a64
  pop af      ;7a67
sub_7a68h:
  and 00fh    ;7a68
  jr z,l7a74h   ;7a6a
l7a6ch:
  ld b,001h   ;7a6c
  add a,030h    ;7a6e
  call 000a2h   ;7a70
  ret     ;7a73
l7a74h:
  dec b     ;7a74
  jr z,l7a6ch   ;7a75
  ret     ;7a77
sputc: ;sub_7a78h:
  ld a,(hl)     ;7a78
  or a      ;7a79
  ret z     ;7a7a
  call 000a2h   ;7a7b
  inc hl      ;7a7e
  jr sputc ;sub_7a78h    ;7a7f
$_logo: ;l7a81h:
  db  0ch,'BEER 202: IDE HDD driver',0dh,0ah
  db  '1.9RC1 (c)SOLiD, 2010',0dh,0ah
  db  0dh,0ah,'IDE0: ',0
BadBIOSfun: ;l7abch:
  scf     ;7abc
  sbc a,a     ;7abd
  ret     ;7abe

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Read MASTER BOOT (0/0/1)
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

ReadMBR: ;sub_7abfh:
  xor a     ;7abf
  ld e,a      ;7ac0
  ld d,a      ;7ac1
  ld c,a      ;7ac2
l7ac3h:
  push hl     ;7ac3
  push bc     ;7ac4
  push de     ;7ac5
  push af     ;7ac6
  call Wait_HDD ;sub_78a5h    ;7ac7
  pop af      ;7aca
  pop de      ;7acb
  pop bc      ;7acc
  call SetHDDParam ;sub_7b11h    ;7acd
  pop hl      ;7ad0
  call hdd_rdsec ;sub_7651h    ;7ad1
  xor a     ;7ad4
  ret     ;7ad5
l7ad6h:
  push hl     ;7ad6
  push bc     ;7ad7
  push de     ;7ad8
l7ad9h:
  push af     ;7ad9
  call Wait_HDD ;sub_78a5h    ;7ada
  pop af      ;7add
  pop de      ;7ade
  pop bc      ;7adf
l7ae0h:
  call SetHDDParam ;sub_7b11h    ;7ae0
  pop hl      ;7ae3
  call hdd_wrsec ;l76b0h   ;7ae4
  xor a     ;7ae7
  ret     ;7ae8

;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Logical sector -> physical
; CHS addressing used.
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

SectorTrans: ;sub_7ae9h:
  push hl     ;7ae9
  ex de,hl      ;7aea
  ld a,h      ;7aeb
  and l     ;7aec
  inc a     ;7aed
  jr nz,l7af9h    ;7aee
  ld hl,(0fd0dh)    ;7af0
  ld de,(0fd0fh)    ;7af3
  jr l7afch   ;7af7
l7af9h:
  ld de,00000h    ;7af9
l7afch:
  ld c,(ix+000h)    ;7afc
  ld b,(ix+001h)    ;7aff
  add hl,bc     ;7b02
  ex de,hl      ;7b03
  ld c,(ix+002h)    ;7b04
  ld b,(ix+003h)    ;7b07
  adc hl,bc   ;7b0a
  ld a,e      ;7b0c
  ld e,d      ;7b0d
  ld d,l      ;7b0e
  ld c,b      ;7b0f
  pop hl      ;7b10
SetHDDParam: ;sub_7b11h:
  ex af,af'     ;7b11
  ld a,080h   ;7b12
  out (033h),a    ;7b14
  ld a,0c2h   ;7b16
  out (032h),a    ;7b18
  ld a,001h   ;7b1a
  out (030h),a    ;7b1c
  ld a,082h   ;7b1e
  out (032h),a    ;7b20
  ld a,0c2h   ;7b22
  out (032h),a    ;7b24
  inc a     ;7b26
  out (032h),a    ;7b27
  ex af,af'     ;7b29
  push bc     ;7b2a
  ld bc,00530h    ;7b2b
  out (c),a   ;7b2e
  pop bc      ;7b30
  ld a,083h   ;7b31
  out (032h),a    ;7b33
  ld a,0c3h   ;7b35
  out (032h),a    ;7b37
  ld a,0c6h   ;7b39
  out (032h),a    ;7b3b
  ld a,c      ;7b3d
  and 00fh    ;7b3e
  or 0e0h   ;7b40
  out (030h),a    ;7b42
  ld a,086h   ;7b44
  out (032h),a    ;7b46
  ld a,0c6h   ;7b48
  out (032h),a    ;7b4a
  ld a,0c4h   ;7b4c
  out (032h),a    ;7b4e
  ld bc,00530h    ;7b50
  out (c),e   ;7b53
  ld a,084h   ;7b55
  out (032h),a    ;7b57
  ld a,0c4h   ;7b59
  out (032h),a    ;7b5b
  inc a     ;7b5d
  out (032h),a    ;7b5e
  out (c),d   ;7b60
  ld a,085h   ;7b62
  out (032h),a    ;7b64
  ld a,0c5h   ;7b66
  out (032h),a    ;7b68
  ld a,0c7h   ;7b6a
  out (032h),a    ;7b6c
  ret     ;7b6e
l7b6fh:
  call GetMySlot ;l602dh   ;7b6f
  ld e,a      ;7b72
  ld b,004h   ;7b73
  ld d,000h   ;7b75
  ld hl,0fb21h    ;7b77
l7b7ah:
  ld a,(hl)     ;7b7a
  add a,d     ;7b7b
  ld d,a      ;7b7c
  inc hl      ;7b7d
  ld a,(hl)     ;7b7e
  inc hl      ;7b7f
  cp e      ;7b80
  jr z,l7b88h   ;7b81
  djnz l7b7ah   ;7b83
  xor a     ;7b85
  scf     ;7b86
  ret     ;7b87
l7b88h:
  dec hl      ;7b88
  ld a,d      ;7b89
  sub (hl)      ;7b8a
  add a,041h    ;7b8b
  ld b,(hl)     ;7b8d
  or a      ;7b8e
  ret     ;7b8f

;ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ

  ds  7F80h - $

;ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ

  db  'SOLIDSOFT XBIOS '  ;locates @ 7F80h
          ;must NOT change since is used for
          ;HDD ROM search/identification.
  jp  XBIOS_ver
  jp  BadBIOSfun1
  jp  IDE_Inf1 ;7982 ? IDE_Info ?
  jp  BadBIOSfun     ;7abc
  xor a  ; ? HDD_seek ?
  scf
  ret
  jp  l7ac3h  ; ? HDD_Abs_Read  ?
  jp  l7ad6h  ; ? HDD_Abs_write ?
  jp  l7b6fh    ;7b6f
  jp  BadBIOSfun     ;7abc
  jp  BadBIOSfun     ;7abc
  jp  BadBIOSfun     ;7abc
  jp  BadBIOSfun     ;7abc
  jp  BadBIOSfun     ;7abc
  jp  BadBIOSfun     ;7abc
  jp  BadBIOSfun     ;7abc
  jp  BadBIOSfun     ;7abc
  jp  BadBIOSfun     ;7abc
XBIOS_ver:
  ld  hl,0190h
  xor a
  ret
;ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
; Illegal XBIOS call
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ

BadBIOSfun1:
  ld hl,0fd0dh    ;7fc8
  ld de,0fd0fh    ;7fcb
  xor a     ;7fce
  ret     ;7fcf
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  dw 0ffffh
  END
