Obrigado a Julio Marchi pelo espaço cedido na MSX All |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Slot View - Beta 3
Nota: este código do Slot View é antigo. Caso deseje acessar o mais recente, juntamente com a explicação do projeto em português, clique aqui.
Esquema:
Main:
Testes realizados
A RAM do MSX Turbo-R testada estava no Slot 3-0. copyslot 10 ORG &H8E0C 50 LD DE,(&HB004) ; Endereço para cópia 60 LD HL,&HB002 ; Configura SLOT 70 LD C,(HL) 80 LD HL,&HB001 90 LD B,(HL) 100 XOR A 110 CP B 120 LD A,&B00000011 ; Caso pagina 0 130 JR Z,SLT0 140 SLA C 150 SLA C 160 SLA C 170 SLA C 180 LD A,&B00110000 ; Caso pagina 2 190 SLT0: LD HL,&HB000 200 LD B,(HL) 210 CPL 220 AND B 230 ADD A,C 240 OUT (&HA8),A 250 LD HL,&H4000 260 LOOP: LD A,(DE) 270 LD (HL),A 280 INC HL 290 INC DE 300 XOR A 310 CP L 320 JR NZ,LOOP 330 LD A,&H80 340 CP H 350 JR NZ,LOOP 370 LD A,B 380 OUT (&HA8),A 390 RET view-t 10 ORG &H9000 20 LD DE,&H8E45 ; Endereço original da tela compactada 25 LD HL,0 30 INICIO: LD A,(DE) 40 OR 0 50 JR Z,FIM 60 LD B,A 70 INC DE 80 LD A,(DE) 90 LOOP: CALL &H004D 100 INC HL 120 DJNZ LOOP 130 INC DE 140 JR INICIO 150 FIM: RET dump2 10 ORG &H9018 11 LD DE,(&HB004) ; Posição de Memoria 12 CALL TESTE ; Teste para ajustar para &H4000 30 LD HL,268 ; Posicao inicial ASCII 40 EXX ; Troca modo interno 50 LD B,16 ; 16 linhas de texto 60 LD HL,242 ; Posicao inicial HEXA 70 LE: EXX ; Troca modo externo 80 LD B,8 90 LI: LD A,(DE) 100 LD C,A 110 CP 33 ; Inicio Impressao ASCII 120 JP C,DOT 130 CP 127 140 JR C,NDOT 150 DOT: LD A,46 160 NDOT: CALL &H004D 170 INC DE 180 INC HL ; Fim impressao ASCII 190 LD A,C 200 EXX ; Troca modo interno 210 LD C,A 220 AND &B11110000 ; Inicio impressao Hexa 230 SRL A 240 SRL A 250 SRL A 260 SRL A 270 CP 10 280 JR C,NUM1 290 ADD A,7 300 NUM1: ADD A,48 310 CALL &H004D 320 LD A,C 330 AND &B00001111 340 CP 10 350 JR C,NUM2 360 ADD A,7 370 NUM2: ADD A,48 380 INC HL 390 CALL &H004D 400 INC HL 410 INC HL ; Fim impressao Hexa 420 EXX ; Troca modo externo 430 DJNZ LI 440 EXX ; Troca modo interno 450 LD DE,16 ; Proxima linha Hexa 460 ADD HL,DE 470 EXX ; Troca modo externo 480 PUSH DE 490 LD DE,32 500 ADD HL,DE 510 POP DE 520 EXX ; Troca modo interno 530 DJNZ LE 540 EXX ; Troca modo externo 550 RET 560 TESTE: LD HL,&HB001 570 LD A,(HL) 571 LD B,1 ; Verifica se pagina e' 1 572 CP B 573 RET Z ; Retorna se verdade 580 LD B,0 590 CP B 591 JR NZ,AK2 592 LD HL,&H4000 ; Se pagina for 0, some 4000 ao endereco 593 AK1: ADD HL,DE ; Corrige endereco para pagina 1 594 LD D,H 595 LD E,L 596 RET 600 AK2: LD HL,&HC000 ; Se pagina for 2, some C000 ao endereco 610 LD B,2 620 CP B 630 JR Z,AK1 640 LD HL,&H8000 ; Se pagina for 3, some 8000 ao endereco 650 JR AK1 bloco 10 ORG &H909B 20 LD HL,&HB006 ; Impressao do bloco 30 LD A,(HL) 40 LD D,0 50 LD E,A 60 LD HL,168 70 CALL END 80 JR E2 90 END: LD A,E 100 SRL A 110 SRL A 120 SRL A 130 SRL A 140 CALL ASCII 150 CALL &H004D 160 END2: LD A,E 170 AND &B00001111 180 CALL ASCII 190 INC HL 200 CALL &H004D 210 RET 220 ASCII: CP 10 230 JR C,NUM1 240 ADD A,7 250 NUM1: ADD A,48 260 RET 270 E2: LD DE,(&HB004) ; Impressao do endereco atual 330 LD HL,127 340 ADD HL,DE 350 LD B,H 360 LD C,L 370 LD HL,178 380 CALL END 390 LD HL,176 400 LD E,D 410 CALL END 420 LD D,B 430 LD E,C 440 LD HL,183 450 CALL END 460 LD HL,181 470 LD E,D 480 CALL END 490 LD HL,&HB002 ; Impressao do slot atual 500 LD A,(HL) 510 LD E,A 520 LD HL,86 530 CALL END2 540 LD HL,&HB003 ; Impressao do sub-slot atual 550 LD A,(HL) 560 LD E,A 570 LD HL,88 580 CALL END2 590 LD HL,&HB001 ; Impressao da pagina atual 600 LD A,(HL) ; e os limites fisicos (?000-?FFF) 610 LD B,A 620 XOR A 630 CP B 640 JR NZ,P1 650 LD DE,&H0003 660 JR PP 670 P1: LD A,1 680 CP B 690 JR NZ,P2 700 LD DE,&H0407 710 JR PP 720 P2: LD A,2 730 CP B 740 JR NZ,P3 750 LD DE,&H080B 760 JR PP 770 P3: LD A,3 780 LD DE,&H0C0F 790 PP: LD HL,106 800 CALL END2 810 LD E,D 820 LD HL,101 830 CALL END2 840 LD HL,98 850 LD E,B 860 CALL END2 870 RET mudaslt 10 ORG &H9145 20 DI 30 LD HL,&HB000 40 LD A,(HL) 50 CALL ENASS 60 LD HL,&HB001 ; Verifica pagina atual 70 LD B,(HL) 80 LD D,B 90 LD A,2 100 CP B 110 JR NZ,N1 ; Se pagina nao for 2, entao N1 120 D1: CALL &HC000 ; Se for pagina 2, rode rotina da pg 3 da RAM 130 JR FIM 140 N1: XOR A ; Rotina de copia: 150 CP B ; 160 JR NZ,N2 ; Tudo e' copiado para pagina 1 da RAM 170 JR D1 ; 180 N2: LD HL,&HB002 190 LD C,(HL) 200 LD A,3 210 LI1: SLA C 220 SLA C 230 SLA A 240 SLA A 250 DJNZ LI1 260 LF1: CPL 270 LD B,A 280 IN A,(&HA8) 290 AND B 300 OR C 310 OUT (&HA8),A 320 LD A,3 330 CP D 340 JR Z,COPY 350 JR FIM 360 COPY: LD DE,&HC000 370 LD HL,&H4000 380 L3: LD A,(DE) 390 LD (HL),A 400 INC DE 410 INC HL 420 XOR A 430 CP E 440 JR NZ,L3 450 CP D 460 JR NZ,L3 470 LD HL,&HB000 480 LD A,(HL) 490 OUT (&HA8),A 500 FIM: CALL RETSS 510 EI 520 RET 530 ENASS: LD HL,&HB002 ; Troca para slot e sub slot requerido 540 LD C,(HL) ; (B002 e B003) 550 LD B,3 560 ENL1: SLA C 570 SLA C 580 DJNZ ENL1 590 LD B,&B00111111 600 AND B 610 ADD A,C 620 OUT (&HA8),A 630 LD HL,&HB001 640 LD B,(HL) 650 LD HL,&HB003 660 LD D,(HL) 670 XOR A 680 CP B 690 LD A,3 700 JR Z,ENN1 710 ENL2: SLA D 720 SLA D 730 SLA A 740 SLA A 750 DJNZ ENL2 760 ENN1: CPL 770 LD C,A 780 LD HL,&HFFFF 790 LD A,(HL) 800 CPL 810 AND C 820 ADD A,D 830 LD (HL),A 840 LD HL,&HB000 850 LD A,(HL) 860 OUT (&HA8),A 870 RET 880 RETSS: LD HL,&HB001 ; Retorna configuracao original 881 LD A,1 882 LD B,(HL) 883 CP B 884 RET Z 890 IN A,(&HA8) 900 LD D,A 910 LD HL,&HB002 920 LD C,(HL) 930 LD B,3 940 REL1: SLA C 950 SLA C 960 DJNZ REL1 970 LD B,&B00111111 980 AND B 990 ADD A,C 1000 OUT (&HA8),A 1010 XOR A 1020 LD HL,&HFFFF 1030 LD (HL),A 1040 LD A,D 1050 OUT (&HA8),A 1060 RET main 10 ORG &HA000 20 CALL &H6C ; INITTXT (Screen 0) 30 LD HL,&HFCA9 ; * 40 LD A,1 ; * Desaparece Cursor 50 LD (HL),A ; * 60 LD DE,&H8E0C ; % 70 LD HL,&HC000 ; % 80 LD B,&H39 ; % Copia "copyslot" 90 SLFC: LD A,(DE) ; % para pagina 3 100 LD (HL),A ; % 110 INC DE ; % 120 INC HL ; % 130 DJNZ SLFC ; % 140 CALL &H9000 ; Descompacta e exibe a tela 150 IN A,(&HA8) ; * 160 LD B,A ; * 170 LD A,&B00110000 ; * Obtem configuracao de Slots 180 AND B ; * E altera para o formato 190 SRL A ; * RAM RAM RAM ROM 200 SRL A ; * 3 2 1 0 210 OR B ; * 220 OUT (&HA8),A ; * 230 LD HL,&HB000 ; % Passa configuracao de slots 240 LD (HL),A ; % para B000 250 XOR A ; Zera acumulador 260 LD B,6 ; * 270 LP1: INC HL ; * Zera todas as variáveis 280 LD (HL),A ; * de B001 a B006 290 DJNZ LP1 ; * 300 CALL &H9145 ; Rotina "Muda Slot" 310 TECL: CALL &H9018 ; Rotina "Dump de Memoria" 320 CALL &H909B ; Rotina "Informacoes" 330 CALL &H9F ; CHGET - Espera tecla 340 LD B,A ; % 350 LD B,&H1B ; % 360 CP B ; % 370 JR Z,ESC ; % 380 LD B,&H1D ; % 390 CP B ; % 400 JR Z,ESQ ; % 410 LD B,&H1C ; % 420 CP B ; % 430 JR Z,DIR ; % 440 LD B,&H1E ; % 450 CP B ; % 460 JP Z,CIMA ; % 470 LD B,&H1F ; % 480 CP B ; % 490 JP Z,BAIXO ; % 500 LD B,&H53 ; % Switch (tecla) 510 CP B ; % { 520 JP Z,S ; % case ... 530 LD B,&H73 ; % } 540 CP B ; % 550 JP Z,S ; % 560 LD B,&H50 ; % 570 CP B ; % 580 JP Z,P ; % 590 LD B,&H70 ; % 600 CP B ; % 610 JP Z,P ; % 620 LD B,&H55 ; % 630 CP B ; % 640 JP Z,U ; % 650 LD B,&H75 ; % 660 CP B ; % 670 JP Z,U ; % 680 JP TECL ; % 690 ESC: LD HL,&HB000 ; * 700 LD A,(HL) ; * 710 LD B,A ; * 720 LD A,&B11110000 ; * Case Esc: 730 AND B ; * Retorne a configuracao de slots, 740 OUT (&HA8),A ; * limpe a tela e saia 745 CALL ZEROSS ; * 750 XOR A ; * 760 CALL &HC3 ; * 770 RET ; * 780 ESQ: LD HL,&HB006 ; % 790 LD B,(HL) ; % 800 LD A,&HFB ; % 810 ADD A,B ; % 820 LD B,&HFB ; % 830 CP B ; % 840 JP Z,TECL ; % 850 JP C,ESQ1 ; % Case Esq: 860 LD A,0 ; % Volte 5 paginas de memoria 870 ESQ1: LD (HL),A ; % 880 LD DE,(&HB004) ; % 890 JR C,ESQ2 ; % 900 LD L,0 ; % 910 LD A,&HF0 ; % 920 AND D ; % 930 LD H,A ; % 940 JR ESQ3 ; % 950 ESQ2: LD HL,&HFD80 ; % 960 ADD HL,DE ; % 970 ESQ3: LD (&HB004),HL ; % 980 CALL &H9018 ; % 990 JP TECL ; % 1000 DIR: LD HL,&HB006 ; * 1010 LD B,(HL) ; * 1020 LD A,5 ; * 1030 ADD A,B ; * 1040 LD B,&H84 ; * 1050 CP B ; * 1060 JP Z,TECL ; * 1070 LD B,&H7F ; * 1080 CP B ; * 1090 JP C,D1 ; * 1100 LD A,&H7F ; * Case Dir: 1110 D1: LD (HL),A ; * Avance 5 paginas de memoria 1120 LD DE,(&HB004) ; * 1130 JR C,D2 ; * 1140 LD L,&H80 ; * 1150 LD A,&HF0 ; * 1160 AND D ; * 1170 LD D,&HF ; * 1180 ADD A,D ; * 1190 LD H,A ; * 1200 JR D3 ; * 1210 D2: LD HL,&H0280 ; * 1220 ADD HL,DE ; * 1230 D3: LD (&HB004),HL ; * 1240 CALL &H9018 ; * 1250 JP TECL ; * 1260 CIMA: LD HL,&HB006 ; % 1270 LD B,(HL) ; % 1280 XOR A ; % 1290 CP B ; % 1300 JP Z,TECL ; % 1310 DEC B ; % Case Cima: 1320 LD (HL),B ; % Volte 1 pagina 1330 LD DE,(&HB004) ; % 1340 LD HL,&HFF80 ; % 1350 ADD HL,DE ; % 1360 LD (&HB004),HL ; % 1370 CALL &H9018 ; % 1380 JP TECL ; % 1390 BAIXO: LD HL,&HB006 ; * 1400 LD B,(HL) ; * 1410 LD A,&H7F ; * 1420 CP B ; * 1430 JP Z,TECL ; * 1440 INC B ; * Case Baixo: 1450 LD (HL),B ; * Avance 1 pagina 1460 LD DE,(&HB004) ; * 1470 LD HL,&H0080 ; * 1480 ADD HL,DE ; * 1490 LD (&HB004),HL ; * 1500 CALL &H9018 ; * 1510 JP TECL ; * 1520 S: LD HL,&HB002 ; % 1530 LD A,(HL) ; % 1540 PUS: INC A ; % 1550 LD B,4 ; % 1560 CP B ; % Case S: 1570 JR NZ,S1 ; % Avance um Slot 1580 XOR A ; % 1590 S1: LD (HL),A ; % 1600 CALL INISLT ; % 1610 CALL &H9145 ; % 1620 JP TECL ; % 1630 U: LD HL,&HB003 ; * Case U: 1640 LD A,(HL) ; * Avance um sub-slot 1650 JR PUS ; * 1660 P: LD HL,&HB001 ; % Case P: 1670 LD A,(HL) ; % Avance uma pagina 1680 JR PUS ; % 1690 INISLT: LD HL,&HB001 ; * 1700 LD B,(HL) ; * 1710 LD HL,&HB005 ; * 1720 XOR A ; * 1730 CP B ; * 1740 JR NZ,INI2 ; * 1750 LD (HL),A ; * 1760 JR BACK ; * 1770 INI2: LD A,1 ; * 1780 CP B ; * Rotinas de Ajustes 1790 JR NZ,INI3 ; * 1800 LD A,&H40 ; * 1810 LD (HL),A ; * 1820 JR BACK ; * 1830 INI3: LD A,2 ; * 1840 CP B ; * 1850 JR NZ,INI4 ; * 1860 LD A,&H80 ; * 1870 LD (HL),A ; * 1880 JR BACK ; * 1890 INI4: LD A,&HC0 ; * 1900 LD (HL),A ; * 1910 BACK: DEC HL ; * 1920 XOR A ; * 1930 LD (HL),A ; * 1940 LD HL,&HB006 ; * 1950 LD (HL),A ; * 1960 RET ; * 1970 ZEROSS: LD B,A ; % 1980 LD C,&B00111111 ; % 1990 AND C ; % 2000 LD HL,&HFFFF ; % Rotina de retorno de 2010 DI ; % configuracao inicial 2020 OUT (&HA8),A ; % de slots 2030 XOR A ; % 2040 LD (HL),A ; % 2050 LD A,B ; % 2060 OUT (&HA8),A ; % 2070 EI 2080 RET |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||