Материал из Chipwiki
Перейти к: навигация, поиск
WonderSwan/Программирование — различия между версиями
Строка 3: Строка 3:
 
==Описание==
 
==Описание==
 
* http://cygne.emuunlim.com/files/wstech21.txt
 
* http://cygne.emuunlim.com/files/wstech21.txt
 +
 +
'''Процессор'''
 +
 +
Процессорное ядро - NEC V30 MZ на частоте 3.072 Мгц.
 +
 +
NEC V30 MZ - убыстрённая версия V30 с внутренним конвеером (16 байтовый буфер предварительной загрузки). V30MZ примерно в 4 раза быстрее V30. V30 в свою очередь является клоном Intel 8086, но работает на 30% быстрее его, может эмулировать Intel 8080 и содержит собственные инструкции.
 +
 +
В V30 MZ выборка команд, их декодирование и выполнение инструкций выполняется параллельно. По этой причине сложно определить, какая часть программы в настоящее время выполняется путём контроля ввода адресной шины для выборки кода команды.
 +
 +
Если дана команда условного перехода, даже если не выполняются ответвления, адрес назначения перехода выбирается предварительно (1 раз), и поэтому дальнейший мониторинг программы затруднён.
 +
 +
V30 MZ имеет 8 очередей предварительной выборки (16 байт)
 +
 +
Между V30MZ и V30 есть несколько отличий, например, неподдерживаемые опкоды, другая обработка флагов после mul/div.
 +
 +
'''Память'''
 +
 +
20 бит адресного пространства = 1 Мбайт. Память разделена на сегменты по 64 Кбайт.
 +
 +
Сегменты:
 +
* 0 - RAM - 16 Кбайт для WonderSwan / 64 КБайт для WonderSwan Color (внутреннее ОЗУ)
 +
* 1 - SRAM - 256 Кбайт (32х8) - BSI device BS62LV256TC
 +
* 2 - ROM bank (начальный банк = последний)
 +
* 3 - ROM bank (начальный банк = последний)
 +
* 4 - ROM bank (начальный банк = последний - 11)
 +
* 5 - ROM bank (начальный банк = последний - 10)
 +
* 6 - ROM bank (начальный банк = последний - 9)
 +
* 7 - ROM bank (начальный банк = последний - 8)
 +
* 8 - ROM bank (начальный банк = последний - 7)
 +
* 9 - ROM bank (начальный банк = последний - 6)
 +
* A - ROM bank (начальный банк = последний - 5)
 +
* B - ROM bank (начальный банк = последний - 4)
 +
* C - ROM bank (начальный банк = последний - 3)
 +
* D - ROM bank (начальный банк = последний - 2)
 +
* E - ROM bank (начальный банк = последний - 1)
 +
* F - ROM bank (начальный банк = последний)
 +
 +
Сегменты 2-$F переключаются с помощью портов :
 +
 +
$C2 - Cегмент 2. Значение, записанное в порт - номер ROM-банка. $FF означает последний ROM-банк, $FE = последний - 1 .. так далее.<br/>
 +
$C3 - Cегмент 3. Аналогично<br/>
 +
$C0 - Cегменты 4-$F. Биты 0...3 порта $C0 - это биты 4...7 номера ROM-банка в сегментах 4-$F. Биты 0...3 берутся из номера сегмента, например, IO[$C0]=$4E  -> сегмент 9 содержит ROM bank $E9.
 +
 +
'''RAM map'''
 +
WS/WSC:
 +
* $0000 - $1FFF
 +
* $2000 - $3FFF - 4-цветные тайлы
 +
Только для WSC:
 +
* $4000 - $7FFF - банк 0 16-цветных тайлов
 +
* $8000 - $BFFF - банк 1 16-цветных тайлов
 +
* $C000 - $FDFF
 +
* $FE00 - $FFFF - палитры
 +
 +
'''Графика'''
 +
 +
'''Звук'''
 +
 +
'''Заголовок ROM'''
 +
 +
'''Прерывания'''
 +
 +
'''Управление'''
 +
 +
'''Internal EEPROM Communication'''
 +
 +
'''I/O порты'''
  
 
==Ассемблеры==
 
==Ассемблеры==
Строка 8: Строка 74:
  
 
==Инструменты==
 
==Инструменты==
 
  
 
==Эмуляторы==
 
==Эмуляторы==

Версия 11:28, 7 апреля 2019

Описание

Процессор

Процессорное ядро - NEC V30 MZ на частоте 3.072 Мгц.

NEC V30 MZ - убыстрённая версия V30 с внутренним конвеером (16 байтовый буфер предварительной загрузки). V30MZ примерно в 4 раза быстрее V30. V30 в свою очередь является клоном Intel 8086, но работает на 30% быстрее его, может эмулировать Intel 8080 и содержит собственные инструкции.

В V30 MZ выборка команд, их декодирование и выполнение инструкций выполняется параллельно. По этой причине сложно определить, какая часть программы в настоящее время выполняется путём контроля ввода адресной шины для выборки кода команды.

Если дана команда условного перехода, даже если не выполняются ответвления, адрес назначения перехода выбирается предварительно (1 раз), и поэтому дальнейший мониторинг программы затруднён.

V30 MZ имеет 8 очередей предварительной выборки (16 байт)

Между V30MZ и V30 есть несколько отличий, например, неподдерживаемые опкоды, другая обработка флагов после mul/div.

Память

20 бит адресного пространства = 1 Мбайт. Память разделена на сегменты по 64 Кбайт.

Сегменты:

  • 0 - RAM - 16 Кбайт для WonderSwan / 64 КБайт для WonderSwan Color (внутреннее ОЗУ)
  • 1 - SRAM - 256 Кбайт (32х8) - BSI device BS62LV256TC
  • 2 - ROM bank (начальный банк = последний)
  • 3 - ROM bank (начальный банк = последний)
  • 4 - ROM bank (начальный банк = последний - 11)
  • 5 - ROM bank (начальный банк = последний - 10)
  • 6 - ROM bank (начальный банк = последний - 9)
  • 7 - ROM bank (начальный банк = последний - 8)
  • 8 - ROM bank (начальный банк = последний - 7)
  • 9 - ROM bank (начальный банк = последний - 6)
  • A - ROM bank (начальный банк = последний - 5)
  • B - ROM bank (начальный банк = последний - 4)
  • C - ROM bank (начальный банк = последний - 3)
  • D - ROM bank (начальный банк = последний - 2)
  • E - ROM bank (начальный банк = последний - 1)
  • F - ROM bank (начальный банк = последний)

Сегменты 2-$F переключаются с помощью портов :

$C2 - Cегмент 2. Значение, записанное в порт - номер ROM-банка. $FF означает последний ROM-банк, $FE = последний - 1 .. так далее.
$C3 - Cегмент 3. Аналогично
$C0 - Cегменты 4-$F. Биты 0...3 порта $C0 - это биты 4...7 номера ROM-банка в сегментах 4-$F. Биты 0...3 берутся из номера сегмента, например, IO[$C0]=$4E -> сегмент 9 содержит ROM bank $E9.

RAM map WS/WSC:

  • $0000 - $1FFF
  • $2000 - $3FFF - 4-цветные тайлы

Только для WSC:

  • $4000 - $7FFF - банк 0 16-цветных тайлов
  • $8000 - $BFFF - банк 1 16-цветных тайлов
  • $C000 - $FDFF
  • $FE00 - $FFFF - палитры

Графика

Звук

Заголовок ROM

Прерывания

Управление

Internal EEPROM Communication

I/O порты

Ассемблеры

  • nasm

Инструменты

Эмуляторы