Menus

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.

Note: this Slot View code is obsolete. If you want to access the most recent code and details about the project in english, please click here.


Esquema:

Endereço Inicial Endereço Final Tamanho Nome Função Status
8E0C 8E44 0038 copyslot Cópia de slot para pagina da RAM (pagina 2). Beta
8E45 8FFF 01BA tela Tela principal compactada em Run-Length. Ok
9000 9017 0017 view-t Descompacta e exibe a tela principal. Ok
9018 909A 0082 dump2 Exibe informações da memória. Ok
909B 9144 00A9 bloco Exibe informações adicionais. Ok
9145 91FD 004F mudaslt Altera o slot e subslot. Beta
      savepg Salva página em disco. Falta
91FE 938A 018D main Programa principal. Beta

Main:
* Carrega a tela principal
* Setar o seguinte formato para A8: RAM RAM RAM ROM
* Pagina = 0
* Slot = 0
* Sub-Slot = 0
* Endereço = 0
* Bloco = 0
* Atualiza informação
* Dump 

Variaveis:
B000 - Configuração original dos Slots
B001 - Página atual
B002 - Slot Atual
B003 - Subslot Atual
B004 - endereço+offset
B005 - endereço+offset
B006 - bloco

C000 - Cópia de página


Testes realizados

Acesso a slots (MSX Turbo R):

  Página 0 Página 1 Página 2 Página 3
Slot 0-0 Ok Ok Ok Ok
Slot 0-1 Ok Ok Ok Ok
Slot 0-2 Ok Ok Ok Ok
Slot 0-3 Ok Ok Ok Ok
Slot 1-0 Ok Ok Ok Ok
Slot 1-1 Ok Ok Ok Ok
Slot 1-2 Ok Ok Ok Ok
Slot 1-3 Ok Ok Ok Ok
Slot 2-0 Ok Ok Ok Ok
Slot 2-1 Ok Ok Ok Ok
Slot 2-2 Ok Ok Ok Ok
Slot 2-3 Ok Ok Ok Ok
Slot 3-0 Ok Ok Ok Ok
Slot 3-1 Ok Erro Erro Erro
Slot 3-2 Ok Erro Erro Erro
Slot 3-3 Ok Erro Erro Erro

  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

Marcelo Teixeira Silveira
Engenheiro de Sistemas e Computação - UERJ
Mestre em Engenharia de Computação - UERJ

© MarMSX 1999-2005