From ab9cde80f16934be6ea4f7e3ba8308553061f28b Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Tue, 7 Mar 2017 10:18:31 +0100 Subject: updated todolist; doc: keyboard stuff --- doc/report/notes.tex | 62 +++++++++++++++++++++++++++++++++++++++++--- doc/report/res/pc104conn.csv | 35 +++++++++++++++++++++++++ 2 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 doc/report/res/pc104conn.csv (limited to 'doc') diff --git a/doc/report/notes.tex b/doc/report/notes.tex index e3082d0..79aaa68 100644 --- a/doc/report/notes.tex +++ b/doc/report/notes.tex @@ -2,6 +2,7 @@ \usepackage[a4paper, inner=3cm, outer=3cm, marginpar=0pt]{geometry} \usepackage[explicit]{titlesec} +\usepackage{csvsimple} \usepackage{wrapfig} \usepackage{graphicx} \usepackage{xcolor} % @@ -81,8 +82,8 @@ interfacce esterne per poter collegare dispositivi di memoria come per esempio le uSD. Dunque questa EEPROM vicina al processore sar\`a utilizzata unicamente per il bootloader e per un sistema operativo molto basilare. -\renewcommand\ddate{23.02.2017} -\section{Banchi di memoria} +% \renewcommand\ddate{23.02.2017} +% \section{Banchi di memoria e paging della RAM} \renewcommand\ddate{06.03.2017} \section{Schede normate e clock secondari} @@ -92,8 +93,63 @@ poter montare tutte le schede su un rack. Cos\`i facendo si avrebbe dei connettori standard sul retro che si potrebbero utilizzare per le periferiche esterne. Alternativamente si potrebbe utilizzare una struttura simile al PC/104 permettendo di interfacciare delle periferiche specifiche per computer ancora -diponibili sul mercato. +diponibili sul mercato. Il connettore standard per PC/104 \`e un header 32x2, +quindi con 64 pin mappato come indicato sotto, con un opzionale estensione che +pu\`o aumentare il connettore a 146 +pins\footnote{http://pinouts.ru/Slots/Pc104_pinout.shtml}. +\begin{tabular} +\csvautotabular{res/pc104conn.csv} +\end{tabular} + +\renewcommand\ddate{07.03.2017} +\section{Tastiera Misteriosa} +Nello stesso luogo in cui avevo trovato lo Z80 stesso ho trovato anche una +tastiera con un connettore mai visto. Il connettore era composto da 19 pin, di +cui 16 erano collegati all'interno della tastiera. Inizialmente pensavo che la +tastiera contenesse gi\`a un driver che generava degli interrupt, come una +qualsiasi tastiera moderna, con l'unica differenza che il bus di comunicazione +era parallelo. Ma dopo una ricerca rapida senza risultati ho deciso di aprire la +tastiera per analizzare il layout. Inaspettatamente ho scoperto che l'intero PCB +non \`e altro che una griglia 9x9 con i 18 fili che portano al connettore. +Questo hardware probabilmente era per un C64 Commodore 64 che aveva il resto +della logica programmata nella ROM o sulla scheda madre. + +Per utilizzare l'hardware in questo stato \`e dunque necessario attivare i +primi 9 bit del connettore e successivamente leggere i seguenti 9 mascherando il +tasto interessato. Qui sotto ho preso un esempio che ho trovato online per +dimostrare il concetto in assembly. + +\begin{centering}\begin{verbatim} +; This program waits until the key "S" was pushed. +; Start with SYS 49152 + +*=$c000 ; startaddress + +PRA = $dc00 ; CIA#1 (Port Register A) +DDRA = $dc02 ; CIA#1 (Data Direction Register A) + +PRB = $dc01 ; CIA#1 (Port Register B) +DDRB = $dc03 ; CIA#1 (Data Direction Register B) + + +start sei ; interrupts deactivated + + lda #%11111111 ; CIA#1 port A = outputs + sta DDRA + + lda #%00000000 ; CIA#1 port B = inputs + sta DDRB + + lda #%11111101 ; testing column 1 (COL1) of the matrix + sta PRA + +loop lda PRB + and #%00100000 ; masking row 5 (ROW5) + bne loop ; wait until key "S" + cli ; interrupts activated +ende rts ; back to BASIC +\end{verbatim}\end{centering} \end{document} diff --git a/doc/report/res/pc104conn.csv b/doc/report/res/pc104conn.csv new file mode 100644 index 0000000..1149835 --- /dev/null +++ b/doc/report/res/pc104conn.csv @@ -0,0 +1,35 @@ +Pin;J1/P1;J1/P1;J2/P2 (16-bit modules only);J2/P2 (16-bit modules only) +Number;Row A;Row B;Row C1;Row D1 +0;--;--;0V;0V +1;IOCHCHK*;0V;SBHE*;MEMCS16* +2;SD7;RESETDRV;LA23;IOCS16* +3;SD6;+5V;LA22;IRQ10 +4;SD5;IRQ9;LA21;IRQ11 +5;SD4;-5V;LA20;IRQ12 +6;SD3;DRQ2;LA19;IRQ15 +7;SD2;-12V;LA18;IRQ14 +8;SD1;ENDXFR*;LA17;DACK0* +9;SD0;+12V;MEMR*;DRQ0 +10;IOCHRDY;(KEY)2;MEMW*;DACK5* +11;AEN;SMEMW*;SD8;DRQ5 +12;SA19;SMEMR*;SD9;DACK6* +13;SA18;IOW*;SD10;DRQ6 +14;SA17;IOR*;SD11;DACK7* +15;SA16;DACK3*;SD12;DRQ7 +16;SA15;DRQ3;SD13;+5V +17;SA14;DACK1*;SD14;MASTER* +18;SA13;DRQ1;SD15;0V +19;SA12;REFRESH*;;(KEY)2 0V +20;SA11;SYSCLK;; +21;SA10;IRQ7;; +22;SA9;IRQ6;; +23;SA8;IRQ5;; +24;SA7;IRQ4;; +25;SA6;IRQ3;; +26;SA5;DACK2*;; +27;SA4;TC;; +28;SA3;BALE;; +29;SA2;+5V;; +30;SA1;OSC;; +31;SA0;0V;; +32;0V;0V;; -- cgit v1.2.1