Subversion Repositories pentevo

Rev

Rev 1026 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
623 savelij 1
 
1027 savelij 2
; LAST UPDATE: 09.10.2022 savelij
623 savelij 3
 
764 savelij 4
                TITLE "virtual.a80"
5
 
1026 savelij 6
                DB 0xFF                         ; DCU
665 savelij 7
 
1026 savelij 8
; ஢ 256 
9
COPY_BLOCK
10
        REPT 128                                ; ஢  256 
623 savelij 11
                LDI
1026 savelij 12
        ENDM
13
COPYHBLOCK
14
        REPT 126
623 savelij 15
                LDI
1026 savelij 16
        ENDM
623 savelij 17
                JR COPY_BLOCK1
18
 
1026 savelij 19
                DW 0xFFFF                       ;   뢠 IM 2 I=9
623 savelij 20
 
21
COPY_BLOCK1     LDI
22
                LDI
23
                RET
24
 
1026 savelij 25
;  ७ 㭪権
831 savelij 26
 INIT_VAR
27
 SETVAR _OUT_1F
28
 SETVAR _OUT_3F
29
 SETVAR _OUT_5F
30
 SETVAR _OUT_7F
31
 SETVAR _OUT_FF
32
 SETVAR _OUTI
33
 SETVAR _IN_1F
34
 SETVAR _IN_3F
35
 SETVAR _IN_5F
36
 SETVAR _IN_7F
37
 SETVAR _IN_FF
38
 SETVAR _INI
39
 SETVAR _OUT_C_D
40
 SETVAR _IN_H_C
41
 SETVAR _WR_RD_SECT
42
 SETVAR _CMP_RAMDISK
888 savelij 43
; SETVAR _SET_VIRT_BITS
623 savelij 44
 
831 savelij 45
 SETVAR WOUTCA
46
 SETVAR WWRITE_SEC_
47
 SETVAR WREAD_SEC_
48
 SETVAR WINI_RET
623 savelij 49
 
1026 savelij 50
;  ७ 㭪権
51
;  ⮬   맮
52
W_DATA          DW W_OUT1F                      ;   1F
53
                DW W_OUT3F                      ;   3F
54
                DW W_OUT5F                      ;   5F
55
                DW W_OUT7F                      ;   7F
56
                DW W_OUTFF                      ;   FF
57
                DW W_OUTI                       ; OUTI
58
                DW W_IN1F                       ; ⥭  1F
59
                DW W_IN3F                       ; ⥭  3F
60
                DW W_IN5F                       ; ⥭  5F
61
                DW W_IN7F                       ; ⥭  7F
62
                DW W_INFF                       ; ⥭  FF
63
                DW W_INI                        ; INI
64
                DW W_OUTCD                      ;  ॣ 'D'   'BC'
65
                DW W_INHC                       ; ⥭  ॣ 'H'   'BC'
66
                DW READ_WRITE_SEC               ; ⥭/ ᥪ
67
                DW CMP_RAM_DISK                 ; ஢ઠ RAM ᪠
68
;               DW SET_VIRT_BITS                ; ⠭ ६ ⠭  RST 8
623 savelij 69
EW_DATA
1026 savelij 70
;     맮
71
                DW W_OUTCA                      ;  ॣ 'A'   'BC'
72
                DW WRITE_SEC_                   ;  ᥪ     맮
73
                DW READ_SEC_                    ; ⥭ ᥪ     맮
74
                DW W_INI                        ; INI     맮
623 savelij 75
 
1026 savelij 76
TEXT4VIRTDRV    DB 0x16,ZASTV_Y+2,1
623 savelij 77
TXT4VIRTDRV     DC "Virtual Drive: "
78
ETXT4VIRTDRV
79
 
1026 savelij 80
DOS_NOEMUL      DB ROM_BAS48 | 0x80             ; ࠭ DOS  樥 ⮫쪮  3D13
81
DOS_EMUL        DB ROM_ADD_BAS48 | 0x80         ; ࠭ DOS   墠⮬ ⮢
665 savelij 82
 
1026 savelij 83
NUM_ALT_PAGE
84
        IF EMU3D2F=1
85
                DB ROM_ADD_BAS48 | 0x80
86
        ELSE
87
                DB ROM_BAS48 | 0x80
88
        ENDIF
678 savelij 89
 
1026 savelij 90
; ࠡ稪 RST 30
665 savelij 91
RST30_WORK      EX (SP),HL
623 savelij 92
                PUSH AF
93
                PUSH BC
94
                LD A,I
665 savelij 95
                JP PE,RST30_WORK1
623 savelij 96
                LD A,I
665 savelij 97
RST30_WORK1     DI
623 savelij 98
                PUSH AF
1026 savelij 99
                LD A,(NUM_ALT_PAGE)             ;  ⥪饩 ࠭ 
623 savelij 100
                PUSH AF
1026 savelij 101
                AND 0x3E                        ;  ॠ쭮 ࠭  ᨬ
623 savelij 102
                LD BC,WIN_A0
103
                OUT (C),A
104
                LD B,HIGH (WIN_P0)
764 savelij 105
                LD A,RAM_EVODOS
623 savelij 106
                OUT (C),A
107
                IN A,(PEVO_CONF)
108
                LD (WR_BF),A
109
                OR 1
110
                OUT (PEVO_CONF),A
111
                POP AF
112
                LD (TEK_ROMPAGE),A
113
                LD A,(HL)
114
                LD (DOS_STEK),SP
115
                LD SP,DOS_STEK
1026 savelij 116
                PUSH HL                         ;  HL =  
623 savelij 117
                PUSH DE
118
                LD HL,(DOS_STEK)
119
                LD DE,REG_IF
1026 savelij 120
        REPT 8
623 savelij 121
                LDI
1026 savelij 122
        ENDM
665 savelij 123
                LD HL,EXIT_RST30
1026 savelij 124
                PUSH HL                         ;   襭
623 savelij 125
                LD HL,W_DATA
126
                ADD A,A
127
                ADD A,L        
128
                LD L,A
129
                LD A,(HL)
130
                INC L
131
                LD H,(HL)
132
                LD L,A
133
                JP (HL)
134
 
678 savelij 135
EXIT_RST30      LD HL,REG_IF
623 savelij 136
                LD DE,(DOS_STEK)
1026 savelij 137
        REPT 8
623 savelij 138
                LDI
1026 savelij 139
        ENDM
623 savelij 140
                POP DE
141
                POP HL
142
                LD SP,(DOS_STEK)
143
                LD A,(HL)
144
                INC HL
1026 savelij 145
                CP LOW ((EW_DATA-W_DATA) / 2)
665 savelij 146
                JR C,EXIT_RST302
1026 savelij 147
                LD HL,FOR_RET                   ;  室     맮
665 savelij 148
EXIT_RST302     PUSH HL
764 savelij 149
                LD HL,(COPY_VIRT_BITS)
150
                LD A,(MASK_MNT_DRV)
678 savelij 151
                AND L
1026 savelij 152
                LD A,ROM_ADD_BAS48 | 0x80       ; ࠭  3D2F
153
                JR NZ,EXIT_RST305               ; 롮 ROM 3D2F ᫨  ਬ஢
154
                LD HL,(VIRT_DRIVE)              ;  ஢ઠ  ࠬ᪠
835 savelij 155
                LD A,(MASK_WRK_DRV)
832 savelij 156
                CP L
1026 savelij 157
                LD A,ROM_ADD_BAS48 | 0x80       ; ࠭  3D2F
832 savelij 158
                JR Z,EXIT_RST305
1026 savelij 159
                LD A,ROM_BAS48 | 0x80           ; ࠭  3D13
678 savelij 160
EXIT_RST305     LD HL,(WR_BF)
161
                LD BC,WIN_A0
162
EXIT_RST303     CALL WR_BYTE_RET
665 savelij 163
                LD A,L
623 savelij 164
                POP HL
165
                OUT (PEVO_CONF),A
166
                POP AF
665 savelij 167
                JP PO,EXIT_RST304
623 savelij 168
                EI
678 savelij 169
EXIT_RST304     POP BC
623 savelij 170
                POP AF
171
                EX (SP),HL
172
                RET
173
 
1026 savelij 174
;  "A"   0x1F
623 savelij 175
W_OUT1F         LD A,(REG_A)
627 savelij 176
                LD (WR_1F),A
1026 savelij 177
                AND %11110000
178
                RRCA
179
                RRCA
180
                RRCA
181
                ADD A,LOW (.TABL_CMD)
182
                LD L,A
183
                ADC A,HIGH (.TABL_CMD)
184
                SUB L
185
                LD H,A
186
                LD A,(HL)
187
                INC HL
188
                LD H,(HL)
189
                LD L,A
190
                JP (HL)
191
 
192
.TABL_CMD       DW .CMD_00
193
                DW .CMD_10
194
                DW .CMD_20
195
                DW .CMD_30
196
                DW .CMD_40
197
                DW .CMD_50
198
                DW .CMD_60
199
                DW .CMD_70
200
                DW .CMD_80
201
                DW .CMD_90
202
                DW .CMD_A0
203
                DW .CMD_B0
204
                DW .CMD_C0
205
                DW .CMD_D0
206
                DW .CMD_E0
207
                DW .CMD_F0
208
 
209
; 00-0F  ⠭
210
.CMD_00         XOR A
678 savelij 211
                LD (PORT_3F),A
832 savelij 212
                LD (PORT_5F),A
1026 savelij 213
                OUT (0x3F),A
214
                OUT (0x5F),A
215
                JR .INFF_BIT6
623 savelij 216
 
1026 savelij 217
; 10-1F  ᪠
218
.CMD_10         LD A,(PORT_7F)
678 savelij 219
                LD (PORT_3F),A 
1026 savelij 220
                OUT (0x3F),A
623 savelij 221
                CALL DISK_NONE
1026 savelij 222
                LD A,0x80
223
                JR C,.INFF_BIT61
224
.INFF_BIT6      XOR A
225
.INFF_BIT61     LD (RD_1F),A
226
                LD A,0xBF
623 savelij 227
                LD (RD_FF),A
228
                RET
229
 
1026 savelij 230
; 20-3F  蠣  ।饬 ࠢ
231
.CMD_20
232
.CMD_30         LD A,(PORT_3F)
233
.NAPRAVL        NOP
678 savelij 234
                LD (PORT_3F),A
1026 savelij 235
                OUT (0x3F),A
236
                JR .INFF_BIT6
623 savelij 237
 
1026 savelij 238
; 40-5F  蠣 ।
239
.CMD_40
240
.CMD_50         LD A,(PORT_3F)
623 savelij 241
                INC A
678 savelij 242
                LD (PORT_3F),A 
1026 savelij 243
                OUT (0x3F),A
244
                LD A,0x3C                       ; INC A
245
                LD (.NAPRAVL),A
246
                JR .INFF_BIT6
623 savelij 247
 
1026 savelij 248
; 60-7F  蠣 
249
.CMD_60
250
.CMD_70         LD A,(PORT_3F)
623 savelij 251
                DEC A
678 savelij 252
                LD (PORT_3F),A 
1026 savelij 253
                OUT (0x3F),A
254
                LD A,0x3D                       ; DEC A
255
                LD (.NAPRAVL),A
256
;               JR .INFF_BIT6
623 savelij 257
 
1026 savelij 258
; 80-9F  ⥭ ᥪ
259
.CMD_80
260
.CMD_90
261
;               JR .INFF_BIT6
623 savelij 262
 
1026 savelij 263
; A0-BF   ᥪ
264
.CMD_A0
265
.CMD_B0         JR .INFF_BIT6
623 savelij 266
 
1026 savelij 267
.INFF_BIT7      XOR A
623 savelij 268
                LD (RD_1F),A
1026 savelij 269
                LD A,0x7F
623 savelij 270
                LD (RD_FF),A
271
                RET
272
 
1026 savelij 273
; C0-CF ⥭ 
274
.CMD_C0         JR .INFF_BIT6
623 savelij 275
 
1026 savelij 276
; D0-DF ਭ㤨⥫쭮 뢠
277
.CMD_D0         LD A,0xBF
623 savelij 278
                LD (RD_FF),A
279
                RET
280
 
1026 savelij 281
; E0-EF ⥭ ஦
282
.CMD_E0
283
.CMD_F0         JR .INFF_BIT6
623 savelij 284
 
1026 savelij 285
;  "A"   0x3F
623 savelij 286
W_OUT3F         LD A,(REG_A)
678 savelij 287
                LD (PORT_3F),A
1026 savelij 288
                OUT (0x3F),A
623 savelij 289
                RET
689 savelij 290
 
1026 savelij 291
;  "A"   0x5F
623 savelij 292
W_OUT5F         LD A,(REG_A)
678 savelij 293
                LD (PORT_5F),A
1026 savelij 294
                OUT (0x5F),A
623 savelij 295
                RET
689 savelij 296
 
1026 savelij 297
;  "A"   0x7F
623 savelij 298
W_OUT7F         LD A,(REG_A)
678 savelij 299
                LD (PORT_7F),A
1026 savelij 300
                OUT (0x7F),A
623 savelij 301
                RET
302
 
1026 savelij 303
;  "A"   0xFF
623 savelij 304
W_OUTFF         LD A,(REG_A)
678 savelij 305
                LD (WR_FF),A
1026 savelij 306
                OUT (0xFF),A
623 savelij 307
                AND 3
1026 savelij 308
                LD (MASK_WRK_DRV),A             ;  ᪮
623 savelij 309
                INC A
310
                LD B,A
1026 savelij 311
                LD A,%10000000
835 savelij 312
.L1             RLCA
313
                DJNZ .L1
1026 savelij 314
                LD (MASK_MNT_DRV),A             ; ᪠ ᬮ஢ ᪮
623 savelij 315
                RET
316
 
1026 savelij 317
;  "A"   (C)
623 savelij 318
W_OUTCA         LD A,(REG_A)
319
W_OUTCA1        LD D,A
1026 savelij 320
                LD BC,(REG_C)                   ; ᫨   TR-DOS
678 savelij 321
                LD A,C
1026 savelij 322
; ।    
323
                CP 0x1F
623 savelij 324
                JP Z,W_OUT1F
1026 savelij 325
                CP 0x3F
623 savelij 326
                JR Z,W_OUT3F
1026 savelij 327
                CP 0x5F
623 savelij 328
                JR Z,W_OUT5F
1026 savelij 329
                CP 0x7F
623 savelij 330
                JR Z,W_OUT7F
1026 savelij 331
                CP 0xFF
623 savelij 332
                JR Z,W_OUTFF
665 savelij 333
                CP LOW (WIN_A0)
334
                JR Z,W_OUTCA3
335
W_OUTCA4        OUT (C),D
623 savelij 336
                RET
337
 
1026 savelij 338
;    ATM/PENTEVO
678 savelij 339
W_OUTCA3        LD A,B
340
                LD HL,BB_CPU1
665 savelij 341
                CP HIGH (WIN_A1)
342
                JR Z,W_OUTCA2
343
                CP HIGH (WIN_P2)
344
                JR Z,W_OUTCA2
345
                LD HL,BB_CPU2
346
                CP HIGH (WIN_A2)
347
                JR Z,W_OUTCA2
348
                CP HIGH (WIN_P2)
349
                JR NZ,W_OUTCA4
678 savelij 350
W_OUTCA2        LD E,B
351
                PUSH DE
352
                PUSH HL
353
                CALL READ_WCPU12
354
                POP HL
355
                POP DE
356
                LD (HL),D
665 savelij 357
                INC HL
678 savelij 358
                LD (HL),E
359
                JP WRITE_WCPU12
665 savelij 360
 
1026 savelij 361
;  "D"   (C)
623 savelij 362
W_OUTCD         LD A,(IREG_D)
363
                JR W_OUTCA1
689 savelij 364
 
1026 savelij 365
; । ,  OUTI
623 savelij 366
W_OUTI          LD HL,(BUFF_SECT)
367
                EXX
368
                LD A,(HL)
369
                INC HL
370
                EXX
371
                LD (HL),A
372
                INC HL
373
                LD (BUFF_SECT),HL
374
                RET
375
 
1026 savelij 376
; ⥭  0x1F
623 savelij 377
W_IN1F          LD A,(WR_1F)
1026 savelij 378
                AND %11110000
379
                CP 0x10
380
                JR C,.L1
381
                CP 0x20
382
                JR C,.L3
383
                CP 0x80
384
                JR C,.L5
385
                CP 0xD0
386
                JR Z,.L1
623 savelij 387
                XOR A
1026 savelij 388
                JR .L2
623 savelij 389
 
1026 savelij 390
.L5             LD A,(PORT_3F)
391
                AND A
392
                JR NZ,.L1
393
                LD A,%00100100
1027 savelij 394
                JR .L6
1026 savelij 395
 
396
.L3             LD A,(.INDEX)
631 savelij 397
                XOR %00000100
1026 savelij 398
                JR .L4
631 savelij 399
 
1026 savelij 400
.L1             LD A,0x24
401
.INDEX          EQU $-1
402
.L4             XOR %00000010
1027 savelij 403
.L6             LD (.INDEX),A
1026 savelij 404
.L2             LD (RD_1F),A
623 savelij 405
                LD (REG_A),A
406
                RET
407
 
1026 savelij 408
; ⥭  0x3F
678 savelij 409
W_IN3F          LD A,(PORT_3F)
623 savelij 410
                LD (REG_A),A
411
                RET
689 savelij 412
 
1026 savelij 413
; ⥭  0x5F
678 savelij 414
W_IN5F          LD A,(PORT_5F)
623 savelij 415
                LD (REG_A),A
416
                RET
417
 
1026 savelij 418
; ⥭  0x7F
678 savelij 419
W_IN7F          LD A,(PORT_7F)
623 savelij 420
                LD (REG_A),A
421
                RET
422
 
1026 savelij 423
; ⥭  0xFF
623 savelij 424
W_INFF          LD A,(RD_FF)
425
                LD (REG_A),A
426
                RET
427
 
1026 savelij 428
; ⥭  "H"  ()
623 savelij 429
W_INHC          LD A,(REG_C)
1026 savelij 430
; ।    ⥭
431
W_INHC1         CP 0x1F
623 savelij 432
                JR NZ,W_INHC2
433
                LD A,(RD_1F)
434
                LD (REG_H),A
435
                RET
436
 
1026 savelij 437
W_INHC2         CP 0x3F
623 savelij 438
                JR NZ,W_INHC3
678 savelij 439
                LD A,(PORT_3F)
623 savelij 440
                LD (REG_H),A
441
                RET
442
 
1026 savelij 443
W_INHC3         CP 0x5F
623 savelij 444
                JR NZ,W_INHC4
678 savelij 445
                LD A,(PORT_5F)
623 savelij 446
                LD (REG_H),A
447
                RET
448
 
1026 savelij 449
W_INHC4         CP 0x7F
623 savelij 450
                JR NZ,W_INHC5
678 savelij 451
                LD A,(PORT_7F)
623 savelij 452
                LD (REG_H),A
453
                RET
454
 
1026 savelij 455
W_INHC5         CP 0xFF
623 savelij 456
                JR NZ,W_INHC6
457
                LD A,(WR_FF)
458
                LD (REG_H),A
459
                RET
460
 
461
W_INHC6         LD BC,(REG_C)
462
                IN A,(C)
463
                LD (REG_H),A
464
                RET
465
 
1026 savelij 466
; ⥭ INI
623 savelij 467
W_INI           LD A,(RD_1F)
468
                LD HL,(REG_L)
469
                LD (HL),A
470
                INC HL
471
                DEC B
472
                LD (REG_L),HL
473
                RET
474
 
689 savelij 475
;[   ]
623 savelij 476
READ_SEC_       LD A,(WR_1F)
1026 savelij 477
                AND 0x0F0
478
                CP 0x80
479
                JP C,W_OUT1F.INFF_BIT6
480
                CP 0xC0
623 savelij 481
                JR NZ,READ_SEC_1
678 savelij 482
                LD A,(PORT_3F)
623 savelij 483
                LD HL,(REG_L)
484
                LD (HL),A
485
                INC HL
486
                DEC B
678 savelij 487
                LD A,(PORT_5F)
623 savelij 488
                LD (HL),A
489
                INC HL
490
                DEC B
491
                LD (REG_L),HL
492
                RET
493
 
1026 savelij 494
; ⥭/ ᥪ
495
; IXL = 0 - ⥭, = FF - 
689 savelij 496
READ_WRITE_SEC  PUSH IX
497
                JR WRITE_SEC_1
498
 
1026 savelij 499
; ⥭ ᥪ
623 savelij 500
READ_SEC_1      PUSH IX
501
                LD IXL,0
502
                JR WRITE_SEC_1
503
 
1026 savelij 504
;  ᥪ
623 savelij 505
WRITE_SEC_      PUSH IX
1026 savelij 506
                LD IXL,0xFF
678 savelij 507
WRITE_SEC_1     CALL READ_WCPU12
508
                CALL W_WR_RD_SECT
1026 savelij 509
                LD IX,0x8090
510
                LD (REG_F),IX                   ;  䫠 ᯥ譮 ⥭/ ᥪ
678 savelij 511
                CALL WRITE_WCPU12
623 savelij 512
                POP IX
513
                RET
514
 
1026 savelij 515
FIND_SECTOR     LD BC,WIN_A1
516
                LD A,0x40
665 savelij 517
                OUT (C),A
518
                LD B,HIGH (WIN_P1)
736 savelij 519
                LD A,RAM_RAMDISK
1026 savelij 520
                OUT (C),A                       ; ࠭  ࠬ᪠
521
                LD A,(PORT_3F)                  ; 﫨  ४
522
                ADD A,A                         ; ஭ 2
623 savelij 523
                LD C,A
524
                LD A,(WR_FF)
1026 savelij 525
                AND 0x10                        ; ஢ઠ  ஭ ᪠
526
                JR NZ,.L1
527
                INC C                           ;  ஭ 1
528
.L1             LD B,HIGH (CPU1) + 2            ;  砫   ᥪ  ஦
529
                LD A,(PORT_5F)                  ; 﫨  ᥪ
623 savelij 530
                LD L,A
531
                LD H,0
1026 savelij 532
.L3             LD A,(BC)
533
                LD D,A                          ; 﫨  ᥪ
623 savelij 534
                INC B
535
                LD A,(BC)
1026 savelij 536
                LD E,A                          ; 﫨 ࠧ ᥪ
623 savelij 537
                INC B
1026 savelij 538
                LD A,D
539
                AND A
540
                SCF
541
                RET Z
623 savelij 542
                LD A,L
543
                CP D
1026 savelij 544
                RET Z
623 savelij 545
                LD A,E
546
                ADD A,H
547
                LD H,A
1026 savelij 548
                JR .L3
623 savelij 549
 
1026 savelij 550
; ⥭   ᥪ ࠬ᪠
551
W_WR_RD_SECT    LD A,(WR_FF)
552
                AND 3
553
                INC A
554
                LD B,A
555
                LD A,%10000000
556
.L1             RLCA
557
                DJNZ .L1
558
                LD B,A
559
                LD A,(COPY_VIRT_BITS)
560
                AND B
561
                JP NZ,WR_RD_SEC_M               ; ࠡ  ਬ஢ ࠧ
562
                CALL FIND_SECTOR
563
                JR NC,.L2
564
; ᥪ  ,  室
565
                LD A,0x10                       ; ⠭ 訡  ᥪ  
566
                JP W_IN1F.L2                   
567
 
568
.L2             LD A,E
623 savelij 569
                RRCA
1026 savelij 570
                LD (PORT_7F),A                  ; ࠧ  ᥪ
623 savelij 571
                LD L,0
572
                LD E,L
573
                SRL H
1026 savelij 574
                RR L                            ; HL = ᬥ饭     ᥪ
678 savelij 575
                LD B,HIGH (CPU1)
623 savelij 576
                LD A,(BC)
577
                LD D,A
1026 savelij 578
                ADD HL,DE                       ; HL = ᬥ饭  砫 ࠭  
623 savelij 579
                INC B
580
                LD A,(BC)
1026 savelij 581
                LD C,A                          ; ᬥ饭  ࠭  砫 ࠬ᪠
623 savelij 582
                LD A,H
678 savelij 583
                CP HIGH (CPU1)
1026 savelij 584
                JR C,.L5
585
                SUB 0x40
623 savelij 586
                LD H,A
587
                INC C
1026 savelij 588
; HL = ᬥ饭  ࠭  砫 ᥪ
589
.L5             LD A,C                          ; ᬥ饭   ࠭,  㪠 ᥪ 稭
590
                ADD A,RAM_DATARAMD              ; ਡ  砫 ࠬ  +1.  0 ࠭ ࠬ᪠ ⥫ ᥪ஢
591
                LD IXH,A                        ; ࠭  ᫥ ࠭
665 savelij 592
                LD DE,(REG_L)
593
                LD BC,(BB_CPU1)
594
                LD A,C
595
                LD C,LOW (WIN_A0)
1026 savelij 596
                OUT (C),A                       ; 㫨 ⠭ 5 ࠭
597
.S9             LD A,D                          ; ஢ઠ ࠭ 㤠/㤠 ஢
678 savelij 598
                CP HIGH (CPU2)
665 savelij 599
                PUSH DE
600
                LD DE,CPU1+HIGH (WIN_P1)
1026 savelij 601
                LD BC,WIN_A1                    ; ᫨ 孨 32 ,  㦭   1  ஥஢
602
                JR NC,.S1
665 savelij 603
                LD DE,CPU2+HIGH (WIN_P2)
1026 savelij 604
                LD B,HIGH (WIN_A2)              ; ᫨  32 ,  㦭   2  ஥஢
605
.S1             LD A,0x40
665 savelij 606
                OUT (C),A
607
                LD B,E
1026 savelij 608
                LD A,IXH                        ;  ᫥ ࠭ 
609
                OUT (C),A                       ; 稫 ᫥ ࠭
610
                LD B,D                          ; 訩   砫 祭 ࠭
665 savelij 611
                POP DE
612
                LD A,B
623 savelij 613
                ADD A,H
614
                LD H,A
615
                LD A,IXL
616
                AND A
1026 savelij 617
                JR NZ,.I1
623 savelij 618
                LD A,D
619
                INC A
1026 savelij 620
                JR NZ,.I1
623 savelij 621
                LD A,E
622
                AND A
1026 savelij 623
                JR Z,.I1
624
                NEG
623 savelij 625
                LD C,A
626
                LD B,0
627
                LDIR
628
                NEG
629
                LD C,A
1026 savelij 630
.I2             EX DE,HL
623 savelij 631
                ADD HL,BC
632
                EX DE,HL
633
                ADD HL,BC
678 savelij 634
                LD A,(PORT_7F)
1026 savelij 635
                JP .S8_
623 savelij 636
 
1026 savelij 637
.I1             LD A,D
678 savelij 638
                CP HIGH (CPU1)
1026 savelij 639
                JR NC,.I3
678 savelij 640
                LD A,(PORT_7F)
623 savelij 641
                AND A
1026 savelij 642
                LD BC,0x80
643
                JR Z,.I2
644
                LD BC,0x100
645
                JR .I2
623 savelij 646
 
1026 savelij 647
.I3             CP HIGH (CPU2)                  ; ஢ઠ 室 ࠭ ࠭
648
                JP NC,.S3                       ; ᫨   ࠧ 㥬
678 savelij 649
                CP HIGH (CPU2)-1
1026 savelij 650
                JP C,.S3                        ; ᫨  ⠪  ࠧ 㥬
623 savelij 651
                LD A,E
1026 savelij 652
                AND A                           ; ᫨ ᥪ  㪫뢥  ࠭,  ࠧ 㥬
653
                JR Z,.S3                        ;  ਭ㤨⥫쭮 㥬   ਥ
654
                LD A,IXL                        ; ⥭  ?
623 savelij 655
                AND A
1026 savelij 656
                LD A,E                          ; 訩    
657
                JR Z,.S4
658
                EX DE,HL                        ;   塞 ࠢ
659
.S4             NEG
660
                LD C,A                          ; 㥬 ⮪   
623 savelij 661
                LD B,0
662
                LDIR
663
                NEG
1026 savelij 664
                PUSH AF                         ; ⠫ ᪮쪮 ⠫ ஢  砫 ᫥饣 
665 savelij 665
                LD BC,(BB_CPU2)
666
                LD A,C
667
                LD C,LOW (WIN_A0)
668
                OUT (C),A
669
                LD B,HIGH (WIN_A1)
1026 savelij 670
                LD A,0x40
665 savelij 671
                OUT (C),A
623 savelij 672
                LD B,HIGH (WIN_P1)
673
                LD A,IXH
1026 savelij 674
                OUT (C),A                       ; ᫥ ࠭ 砥  1  ஥஢
675
                LD A,IXL                        ; ⥭  
623 savelij 676
                AND A
1026 savelij 677
                JR Z,.S5
678
                LD A,D                          ;  
679
                SUB 0x40                        ;   㤠 ஢  㣮  ஥஢
623 savelij 680
                LD D,A
1026 savelij 681
                JR .S6
623 savelij 682
 
1026 savelij 683
.S5             LD A,H                          ;  ⥭  
684
                SUB 0x40                        ;   㤠 ஢  㣮  ஥஢ 
623 savelij 685
                LD H,A
1026 savelij 686
.S6             POP AF
687
                LD C,A                          ; ᪮쪮 ⠫ ᪮஢ 
623 savelij 688
                LD B,0
689
                LDIR
678 savelij 690
                LD A,(PORT_7F)
1026 savelij 691
                JR .S8_
623 savelij 692
 
1026 savelij 693
.S3             LD A,IXL                        ; ⥭  
623 savelij 694
                AND A
1026 savelij 695
                JR Z,.S7
696
                EX DE,HL                        ;   塞 ࠢ
697
.S7             LD A,(PORT_7F)
623 savelij 698
                AND A
1026 savelij 699
                JR NZ,.S8
700
                CALL COPYHBLOCK                 ;  ᥪ ࠧ஬ 128  㥬   室
701
.ECOPY_BLOCK    LD A,IXL
623 savelij 702
                AND A
1026 savelij 703
                JR Z,.ECOPY_BLOCK1
623 savelij 704
                EX DE,HL
1026 savelij 705
.ECOPY_BLOCK1   LD (REG_L),DE
623 savelij 706
                RET
707
 
1026 savelij 708
.S8             CALL COPY_BLOCK                 ;  ᥪ 256  㥬   室
709
.S8_            DEC A
710
                JR Z,.ECOPY_BLOCK
678 savelij 711
                LD (PORT_7F),A
623 savelij 712
                LD A,IXL
713
                AND A
1026 savelij 714
                JR Z,.S0
623 savelij 715
                EX DE,HL
1026 savelij 716
.S0             LD A,0x3F
623 savelij 717
                AND H
718
                LD H,A
1026 savelij 719
                JP .S9
623 savelij 720
 
721
CP_TYPEDRIVE    PUSH BC
764 savelij 722
                PUSH HL
723
                LD H,VIRT_REAL_DRIVE
724
                CALL READCMOS
725
                POP HL
623 savelij 726
                AND 3
727
                LD B,A
728
                LD A,(TRD_5CF6)
729
                CP B
730
                POP BC
731
                RET
732
 
1026 savelij 733
; ⠭ ६ ⥪饣 ਢ
623 savelij 734
SET_DRIVENAME   LD H,VIRT_REAL_DRIVE
735
                CALL READCMOS
736
                RRCA
737
                RRCA
738
                AND 3
739
                LD (TRD_5D19),A
740
                LD (TRD_5CF6),A
1026 savelij 741
                OR 0x3C
678 savelij 742
                LD (TRD_5D16),A
623 savelij 743
                RET
744
 
1026 savelij 745
; ଠ஢ ram ᪠
623 savelij 746
FORMAT_RAM      LD A,(TRD_5CF6)
747
                LD B,A
748
                INC B
831 savelij 749
                LD A,%00001000
623 savelij 750
                RLCA
751
                DJNZ $-1
752
                LD B,A
806 savelij 753
;               LD A,(COPY_VIRT_BITS)
754
                RST8D _MOUNTER,_GET_VIRT_BITS
831 savelij 755
                LD (COPY_VIRT_BITS),A
623 savelij 756
                AND B
1026 savelij 757
                JR NZ,FORMAT_RAM3               ; ᫨ =1 ଠ ਬ஢ ࠧ
623 savelij 758
                CALL CP_TYPEDRIVE
1026 savelij 759
                RET NZ                          ; 室  ଠ ५쭮 ᪠
760
                CALL CREATE_TRDTABL             ; ଠ ࠬ᪠ 
623 savelij 761
                XOR A
762
                RET
763
 
764
FORMAT_RAM3     LD HL,TRD_5D25
765
                LD DE,TRD_5D26
1026 savelij 766
                LD BC,0xFF
623 savelij 767
                LD (HL),B
768
                LDIR
769
                LD D,B
770
                LD E,B
1026 savelij 771
                LD B,0x10
623 savelij 772
FORMAT_RAM1     PUSH BC
773
                PUSH DE
774
                LD B,1
775
                LD HL,TRD_5D25
776
                CALL COM_06
777
                POP DE
778
                POP BC
779
                INC E
780
                DJNZ FORMAT_RAM1
781
                XOR A
782
                RET
783
 
1026 savelij 784
; ஢ઠ  થ ࠬ᪠
678 savelij 785
CMP_RAM_DISK    CALL READ_WCPU12
786
                LD BC,WIN_P1
736 savelij 787
                LD A,RAM_RAMDISK
623 savelij 788
                OUT (C),A
1026 savelij 789
                LD HL,CPU1+0x3FFF
623 savelij 790
                LD D,(HL)
791
                DEC H
1026 savelij 792
                LD E,(HL)                       ; 﫨   ஢ન થ
678 savelij 793
                CALL WRITE_WCPU12
794
                LD HL,"RD"
795
                AND A
623 savelij 796
                SBC HL,DE
1026 savelij 797
                RET Z                           ; ᫨ થ  ,  ࠬ  ᮧ
798
; ᮧ ⮣ ࠬ᪠
678 savelij 799
CREATE_TRDTABL  LD BC,WIN_P1
1026 savelij 800
                LD A,RAM_RAMDISK                ; 㦭 ࠭ 砫 ࠬ᪠,  㤥 ⠡ ⥫
678 savelij 801
                OUT (C),A
802
                LD HL,CPU1
623 savelij 803
                PUSH HL
678 savelij 804
                LD DE,CPU1+1
1026 savelij 805
                LD BC,0x3FFF
623 savelij 806
                LD (HL),L
1026 savelij 807
                LDIR                            ; ⨫ ࠭
808
                POP DE                          ;  砫 
809
                LD HL,0                         ; ᬥ饭    ࠭
810
                LD A,0xA0
702 savelij 811
ELT2            PUSH AF
1026 savelij 812
                LD BC,0x1000                    ; 稪 ஢ ᥪ஢   
623 savelij 813
                LD A,L
814
                RRCA
815
                RRCA
1026 savelij 816
                LD (DE),A                       ; ᬥ饭   ஦  ࠭
623 savelij 817
                INC D
818
                LD A,H
1026 savelij 819
                LD (DE),A                       ; ᬥ饭  ࠭  ஦
623 savelij 820
                INC D
821
ELT1            INC C
822
                LD A,C
1026 savelij 823
                LD (DE),A                       ;  ᥪ
623 savelij 824
                INC D
825
                LD A,2
1026 savelij 826
                LD (DE),A                       ; ࠧ ᥪ
623 savelij 827
                INC D
1026 savelij 828
                DJNZ ELT1                       ; ᨬ  ⠡   ᥪ஢  ࠧࠬ
829
                LD D,HIGH (CPU1)                ; 㫨 㪠⥫  砫
830
                INC E                           ;  ᫥饩 ஦
831
                LD BC,0x40
832
                ADD HL,BC                       ; 室  ᫥饩 ஦
702 savelij 833
                POP AF
623 savelij 834
                DEC A
1026 savelij 835
                JR NZ,ELT2                      ; 塞   ஦
836
                LD HL,CPU1+0x3FFF
837
                LD (HL),"R"                     ; ᨬ થ ࠬ᪠
623 savelij 838
                DEC H
839
                LD (HL),"D"
678 savelij 840
                LD BC,WIN_P1
736 savelij 841
                LD A,RAM_DATARAMD
678 savelij 842
                OUT (C),A
843
                LD HL,CPU1
844
                LD DE,CPU1+1
1026 savelij 845
                LD BC,0x0FFF
623 savelij 846
                LD (HL),L
847
                LDIR
848
                LD HL,DSKINFO
1026 savelij 849
                LD DE,CPU1+0x8E1
623 savelij 850
                LD BC,DSK_END-DSKINFO
851
                LDIR
806 savelij 852
                LD BC,WIN_A1
1026 savelij 853
                LD A,0x7A
806 savelij 854
                OUT (C),A
855
                RET
856
 
1026 savelij 857
; ⠭ 䨣樨  ஥஢ 1,2
678 savelij 858
WRITE_WCPU12    LD BC,(BB_CPU1)
859
                LD A,C
860
                LD C,LOW (WIN_A0)
623 savelij 861
                OUT (C),A
678 savelij 862
                LD BC,(BB_CPU2)
863
                LD A,C
864
                LD C,LOW (WIN_A0)
865
                OUT (C),A
866
                RET
867
 
1026 savelij 868
; ⥭ 䨣樨  ஥஢ 1,2
678 savelij 869
READ_WCPU12     LD BC,RD_RAMNROM
1026 savelij 870
                IN L,(C)                        ;  RAM & ROM
678 savelij 871
                INC B
1026 savelij 872
                IN H,(C)                        ;  DOS & 7FFD
678 savelij 873
                ADD HL,HL
874
                LD B,HIGH (RD_1WINA1)
875
                IN A,(C)
1026 savelij 876
                CP 0xC0
678 savelij 877
                JR NC,RST30_01
878
                LD E,A
879
                LD D,HIGH (WIN_P1)
880
                JR RST30_02
881
 
882
RST30_01        RLCA
883
                RLCA
884
                SLA L
885
                RRA
886
                SLA H
887
                RRA
888
                LD E,A
889
                LD D,HIGH (WIN_A1)
890
RST30_02        LD (BB_CPU1),DE
891
                INC B
892
                IN A,(C)
1026 savelij 893
                CP 0xC0
678 savelij 894
                JR NC,RST30_03
895
                LD E,A
896
                LD D,HIGH (WIN_P2)
897
                JR RST30_04
898
 
899
RST30_03        RLCA
900
                RLCA
901
                SLA L
902
                RRA
903
                SLA H
904
                RRA
905
                LD E,A
906
                LD D,HIGH (WIN_A2)
907
RST30_04        LD (BB_CPU2),DE
908
                RET
909
 
910
DISK_NONE       PUSH HL
911
                PUSH BC
912
                CALL READ_WCPU12
913
                LD BC,WIN_A1
1026 savelij 914
                LD A,0x40
678 savelij 915
                OUT (C),A
916
                LD B,HIGH (WIN_P1)
736 savelij 917
                LD A,RAM_RAMDISK
678 savelij 918
                OUT (C),A
1026 savelij 919
                LD HL,CPU1+0x3FFF
678 savelij 920
                LD A,(HL)
921
                DEC H
922
                CP "R"
923
                SCF
924
                JR NZ,DISK_NONE1
925
                LD A,(HL)
926
                CP "D"
927
                SCF
928
                JR NZ,DISK_NONE1
929
                XOR A
930
DISK_NONE1      PUSH AF
931
                CALL WRITE_WCPU12
932
                POP AF
623 savelij 933
                POP BC
678 savelij 934
                POP HL
623 savelij 935
                RET