module ZephRay;

今朝有鱼今朝摸

Category

  • 摄影
  • 玩机
  • 硬件坑
  • 翻译
  • 软件坑
  • 随记

Tags

  • LCD
  • 点屏
  • 单片机
  • 计算器
  • 事
  • FPGA
  • STM32
  • 摄影
  • 古董
  • 测评
  • Verilog
  • 笔记本
  • 改造
  • 移植
  • Linux
  • ARM
  • 树莓派
  • 教程
  • nspire
  • 小动物
  • GameBoy
  • EPD
  • 项目
  • LED
  • 景
  • SDL
  • ThinkPad
  • HP
  • IBM
  • 晒机
  • 3DS
  • Minecraft
  • 82ES
  • Kindle
  • Assembly
  • 手办
  • 花
  • Chiptune
  • 仙剑奇侠传
  • Nikon
  • 贴图
  • 演讲
  • NDSL

Recent replies

  • 城市猎人 发表于「IBM ThinkPad 560E (Type 2640) 简单展示」
  • Khiemmy 发表于「On the way to overclock the TI nspire CX II calculator」
  • critor 发表于「On the way to overclock the TI nspire CX II calculator」
  • ZephRay 发表于「On the way to overclock the TI nspire CX II calculator」
  • critor 发表于「On the way to overclock the TI nspire CX II calculator」
  • imbushuo 发表于「About Me」
  • 070 发表于「古董电脑选型」
  • Thermit 发表于「About Me」
  • 盛崖鱼 发表于「About Me」
  • Wenting Zhang 发表于「About Me」

My

RSS (中文优先)
RSS (English preferred)

坑 / Projects
关于我 / About
简历 / CV
破烂采购计划 / Craplist
古董电脑选型
SM83(GB CPU)指令编码
Linux PI 1M位跑分
Coremark跑分
音质参考

淘宝杂货铺
Bilibili空间
GitHub

Links

cnVintage古董电子论坛
cnCalc计算器论坛

Keshuai Xu
家骅的锦绣谷
>Lithia's Core
ntzyz's space
丘丘塔台
tonoko.moe
kasora's blog
447f.Misaka
paizhang.info
spinmry实验室
Hikari Calyx Tech.
春上冰月的博客
初音没有来
FindHao
Test2g
Shell Bin
LEAFER x LAB
标签:Assembly

【PjEris】 HP35: 串行处理的艺术(一)

2018 年 3 月 25 日分类:翻译#计算器#HP#Assembly

注: 本文原作者Andy Lithia,译者Wenting Zhang,原文发布于http://lithcore.cn/?p=2036,转载请注明出处,仅限于用于教育或其它非商业用途。头图来源:HP35 technical data

本篇中,作为整个旅程的起点,我会简单介绍一下整体架构。为了更好的理解本文,你需要有数字电路和计算机架构的基础知识。如果没有,个人建议可以阅读《数字设计以及计算机架构》学习一下。

hp_35_internal_arch

图1. HP 35 内部架构(出自HPJ 1972 第6期)

hp_35_motherboard

图2. HP 35 主板 (出自The HP35 saga)

相比较常见的计算机/计算器架构,HP35的设计非常独特,而这也就是本文即将要介绍的。在hpmuseum.org上有一个页面对HP35的ISA做了较为详尽的介绍。

在本文中,寄存器、元件等的命名以专利文档中出现的为准。

MORE

S3C2410+IAR裸跑启动文件完全分析

2016 年 1 月 25 日分类:硬件坑#Assembly#ARM

最近在研究HP 39gs的裸跑问题,之前一直用的Keil RealView MDK,然而由于个人喜好问题,想把工程移植到IAR Embedded Workbench上。网上2410/2440+IAR裸跑的先例不多,质量参差不齐,于是我就参考MDK的官方2410启动文件以及IAR的官方某ARM7启动文件重新写了一份,拿出来和大家分享以下,也算是加深一下对ARM启动过程的认识。

在解决启动代码问题之前,首先要写一份icf文件,这个是IAR独有的一种配置文件,MDK下是直接在工程选项里面设置的。这个ICF一般不用关注太多内容,按照以下模板修改即可。

/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x00000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__   = 0x00000000;
define symbol __ICFEDIT_region_ROM_end__     = 0x0007FFFF;
define symbol __ICFEDIT_region_RAM_start__   = 0x08000000;
define symbol __ICFEDIT_region_RAM_end__     = 0x08037FFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__   = 0x2000;
define symbol __ICFEDIT_size_svcstack__ = 0x100;
define symbol __ICFEDIT_size_irqstack__ = 0x100;
define symbol __ICFEDIT_size_fiqstack__ = 0x100;
define symbol __ICFEDIT_size_undstack__ = 0x100;
define symbol __ICFEDIT_size_abtstack__ = 0x100;
define symbol __ICFEDIT_size_heap__     = 0x8000;
/**** End of ICF editor section. ###ICF###*/

 
define memory mem with size = 4G;
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block SVC_STACK with alignment = 8, size = __ICFEDIT_size_svcstack__ { };
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };
define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ { };
define block UND_STACK with alignment = 8, size = __ICFEDIT_size_undstack__ { };
define block ABT_STACK with alignment = 8, size = __ICFEDIT_size_abtstack__ { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place in ROM_region   { readonly };
place in RAM_region   { readwrite,
                        block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,
                        block UND_STACK, block ABT_STACK, block HEAP };

需要修改的就是RAM、ROM的起始地址,注意比如这里ROM的容量为0x80000,那么ROM的终止地址应该为0x7FFFF而不是0x80000!(网上下载到的某开发板例程里面的ICF文件就犯了这个错误)另外如果自己有单独安排RAM的使用,比如LCD的Framebuffer、MMU的TranslationTable之类的,那么已经分配掉的部分不应该被写入这个范围。(某ICF又犯了错误)。然后上面的stack只要自己设置尺寸即可,不需要设定地址,linker会自动分配。

MORE
  • «
  • 1
  • »
Copyright © 2009-2019 Wenting Zhang. All rights reserved.
Unless otherwise noted, content on this blog is licensed under CC BY-SA 4.0.