Вот примерно как я это себе вижу - WizNET втыкается вверх-ногами в какую-то горизонтальную платку, которая в свою очередь втыкается в основную вертикальную:
PCjrNet-proto1s.jpg
А разъём почти такого же размера - т.е. дырка сзади как раз:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
/SCS (optional SPI - if this line goes down then module will switch to SPI mode)
SCLK (optional SPI)
MOSI (optional SPI)
MISO (optional SPI)
Только 2 адресные линии берём - A0 и A1 т.к. модуль будет юзаться в "Indirect-mode" когда доступ к внутренней памяти через 4 регистра (с инкрементом адреса):
3F8h - register MR of W5100 (indirect mode flag and auto-increment flag)
3F9h - register IDM_AR0 of W5100 (most significant byte of the address)
3FAh - register IDM_AR1 of W5100 (least significant byte of the address)
3FBh - register IDM_DR of W5100 (data register to read/write in indirect mode)
3FCh - reserved for future
3FDh - reserved for future
3FEh - reserved for future
3FFh - reserved for future
Третий адрес от PCjr можно потом под память для MAC-адреса заюзать (WizNET не имеет своего собственного MAC-адреса - его надо после сброса программно вводить).
Светодиоды /LNKLED, TX_LED и RX_LED можно оставить на промежуточной горизонтальной платке - будут светить вверх и должны быть видны сквозь решётку корпуса...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
1) GND
2) +3.3V
3) /RESET (if we will need to have an ability to reset module programmatically)
4) /INT (interrupt to signal back to PC that buffers are full or empty)
5) /CS (to programmatically chip enable WizNET module)
6) /SCS (optional SPI - if this line goes down then module will switch to SPI mode)
7) SCLK (optional SPI)
8) MOSI (optional SPI)
9) MISO (optional SPI)
10) D0
11) D1
12) D2
13) D3
14) D4
15) D5
16) D6
17) D7
18) /RD (read control signal)
19) /WR (write control signal)
20) A0 (indirect mode A0)
21) A1 (indirect mode A1)
22) A2
23) A3
24) A4
25) A5
26) A6
27) A7
28) A8
29) A9
30) A10
31) A11
32) A12
33) A13
34) A14
На платке может быть регулятор питания 3.3В, транзистор для разворачивания /INT в диапазон 0..5В и схема сброса при включении питания (сам модуль таковой не имеет)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Тут получается, что я могу универсальную плату сделать, которая сможет рабтоать как с IBM PCjr, так и с RC2014
PCjrNet-RC2014s.jpg
Для RC2014 придётся позаковыристей сделать дешифрацию адреса портов (с переключателем по видимому) и прерывание там активный 0 тогда как в PCjr - активная 1...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
PC Jr. Demo presented at Flashparty 2018 demoparty in Buenos Aires, Argentina. Awarded 1st. place at the demo compo.
Code by Riq, Gfx by Arlequin and Alakran, Music by Uctumi
Download executable release at: http://pungas.space/pvm-64ko.zip
Shaos wrote:На фотке картридж вставлен в левую дырку, но в правой он тоже работает - значит все CS-ы разведены в обе дырки, что есть хорошо. Получается так - разрабатываем программулину в DOSBox как COM-файл (нестандартный, т.к. данные что вместе с кодом лежат будут только для чтения - изменяемые данные надо будет держать где-то в ОЗУ) работающую только с BIOS (т.к. ДОСа нету), далее с помощью моей волшебной программы (исходники которой я скоро выложу на гитхаб) создаём образ для прошивки и вперёд
P.S. Выложил: https://gitlab.com/shaos/pcjr
Волшебная программка лежит в каталоге software и называется PCJRCART.C
Волшебного в ней собственно подсчёт CRC16, который толком нигде не описан применительно к PCjr-картриджам:
/* PCJRCART.C by Shaos (Dec 2016) */
/* Create ROM image from COM file for PCjr cartrige */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "crc16.h"
#define MAXSIZE 65535
int main(int argc, char **argv)
{
FILE *f;
int i;
char fname[100],*po;
unsigned long sz;
unsigned char extra = 0;
unsigned short crc = 0;
unsigned char *bytes = (unsigned char*)malloc(MAXSIZE);
if(bytes==NULL)
{
printf("\nCan't allocate memory!\n\n");
return -1;
}
if(argc<2)
{
printf("\nFilename was not specified!\n\n");
return -2;
}
memset(bytes,0,MAXSIZE);
bytes[0] = 0x55;
bytes[1] = 0xAA;
CalculateTable_CRC16();
strcpy(fname,argv[1]);
f = fopen(fname,"rb");
if(f==NULL)
{
printf("\nCan't open file '%s'!\n\n",fname);
free(bytes);
return -3;
}
fseek(f,0,SEEK_END);
sz = ftell(f);
printf("%s %lu\n",fname,sz);
if(sz>=65280)
{
printf("\nFile is too large!\n\n");
fclose(f);
free(bytes);
return -4;
}
fseek(f,0,SEEK_SET);
fread(&bytes[256],1,sz,f);
fclose(f);
sz += 258;
if(sz&511)
{
sz &= 0xFE00;
sz += 512;
}
bytes[2] = sz>>9;
printf("ROM size is %lu bytes (%i)\n",sz,bytes[2]);
bytes[3] = 0xE9;
bytes[4] = 0x01;
bytes[5] = 0x00;
bytes[6] = 0x00;
bytes[7] = 0xB8;
bytes[8] = 0x00;
bytes[9] = 0x01;
bytes[10] = 0xFF;
bytes[11] = 0xE0;
crc = Compute_CRC16(bytes,sz-2);
printf("Calculated CRC is 0x%4.4X\n",crc);
if(sz==65536) extra = crc&0x00FF;
else bytes[sz-1] = crc&0x00FF;
bytes[sz-2] = (crc&0xFF00)>>8;
crc = Compute_CRC16(bytes,sz);
printf("Corrected CRC is 0x%4.4X\n",crc);
po = strrchr(fname,'.');
if(po!=NULL) *po=0;
strcat(fname,".bin");
f = fopen(fname,"wb");
if(f==NULL)
{
printf("\nCan't open file '%s'!\n\n",fname);
free(bytes);
return -5;
}
if(sz<=32768) fwrite(bytes,1,sz,f);
else fwrite(bytes,1,32768,f);
fclose(f);
if(sz>32768)
{
fname[strlen(fname)-1] = '2';
f = fopen(fname,"wb");
if(f==NULL)
{
printf("\nCan't open file '%s'!\n\n",fname);
free(bytes);
return -6;
}
if(sz==65536)
{
fwrite(&bytes[32768],1,32767,f);
fputc(extra,f);
}
else fwrite(&bytes[32768],1,sz-32768,f);
fclose(f);
}
free(bytes);
return 0;
}
Обратился тут ко мне человек - спрашивает а чего это у тебя в этой программке байтики какие-то заполняются - 0xE9 там, 0x01 и т.д., а я уже и не помню чего они там заполняются
Затолкал это в дизассемблер и получил нижеследующее: