In the corner flat on the third floor, later on Tuesday morning, Raduj wakes on the felt with the coat still drying on the chair by the stove and the communicator on the table in light sleep.
Capacitor 3 is still dead and the pole count is still due Friday. Nila means to leave for Sidliste once the coat is dry, and Mirena is on the floor below sorting wire.
Chapter one, the stove
The lining #
Later in the morning Raduj wakes on the felt with Nila's arm still over him. The stove has burned down to a low red, the leather coat hangs on the chair beside it, and the bowls sit on the table next to the communicator, its screen dark. Nila is awake, lying on her back with her eyes on the ceiling.
opening his eyes and sitting up
letting her arm drop onto the felt You slept a long time.
Yeah.
sitting up and reaching over to the chair by the stove, pressing the collar of the coat between her fingers The leather is dry but the inside is still wet.
We will have to expose the inside too.
turning the coat inside out over her knees and hanging it back on the chair with the lining toward the stove Then we need the fire up again.
coming in with a few split boards under her good arm and feeding them into the stove one at a time I heard you through the floor. There is more wood downstairs in the kitchen, somebody broke up the cupboards before I ever came here.
This apartment is occupied by multiple people then.
closing the stove door and straightening up slowly, one hand on her side It was, before me. You can tell from what they burned and what they left behind. Since the spring it has only been me.
One long beep #
On the table the communicator gives a single long beep, one flat tone held for about two seconds with nothing after it.
picking the communicator up off the table and pressing the side key to light the screen
Cell pack MRB-4, capacitor 3 open circuit
Card write cache kept in memory
Unit stays in light sleep
Retry may move pack state to damaged and stop the system with a kernel panic
Press on DETAIL.
pressing DETAIL
Press BACK.
pressing BACK
The detail screen stays on the glass. The lower half breaks into thin horizontal bands that repeat the same rows of text, and for about ten seconds the picture holds like that. Then the screen goes blank and fills with small text from the top.
Shutdown[0,0] S/C/F=11/1/11 C/D=ff82e1c4/ff8a6f30 state(c0)= now lock QNX Version 6.4.0 Release 2008/10/21-19:12:05EDT [0]PID-TID=1-1? P/T FL=00019001/05020000 "proc/boot/procnto-600" [0]ASPACE PID=7 PF=00001010 "proc/boot/devb-sdmmc-rc220" ppcbe context[ff8b3e48]: 0000) 00000000 ff8b3f10 ff8c0000 0011c4a0 0010) 00000000 ffff0000 0000b800 00000001 0020) ff8a7c00 00000000 0002e000 00000024 0030) 00000000 00000000 ff8a6f30 00000000 0040) 0011c4a0 00000000 00000000 00000000 0050) 00000000 00000000 00000000 00000000 0060) 00000000 00000000 ff8a7c00 0002e000 0070) 00000001 ff8a6f00 ff8b3f10 ff8c1a08 0080) 0000b800 ff82e188 00009032 ff82e1c4 0090) 24000048 20000000 ff8a6f30 instruction[ff82e1c4]: 7c 00 18 ac 7c 00 04 ac 81 3f 00 0c 2c 09 00 00 39 29 ff e0 91 3f 00 0c 40 82 ff e8 4e 80 00 20 stack[ff8b3f10]: 0000) ff8b3f30 ff82e3a0 00000000 0002e000 0010) ff8b3f50 ff8317dc 00000b80 00000001 0020) ff8b3f70 ff8322f4 ff8a7c00 00000000 0030) ff8b3f90 ff80c9e8 00000007 00000000
Chapter two, the report
Restart #
I didn't expect this to happen.
The text stays on the screen for a few seconds, then the screen goes dark. The backlight comes back on, and after a short wait the communicator opens with a report.
The system shut itself down to keep the CPU and memory from freezing.
Press on DETAIL.
pressing DETAIL and waiting for the screen to render What is all this? It went dark on me and came back talking about faults.
I don't know. I have never encountered this fault. Press on HELP.
pressing HELP and waiting for the screen to build
This page is built from the report of the shutdown at 10:42.
Processor, PowerARM
PowerARM is the processor in every RC-220. Meridian developed it to join a PowerPC core and an ARM core on one chip. The name appears in every shutdown report. It does not mean the processor is damaged.
Kernel, procnto-600
The part of QNX that runs all other processes and hands out memory.
First fault, framebuffer
The framebuffer is the memory that holds the picture on the screen. io-display and devg-rc220 draw into it. At 10:41 they stopped drawing, so the last picture stayed on the screen and the keys had no effect.
Second fault, kernel
At 10:42 the kernel read an address that was not mapped. Signal 11 and fault 11 name this kind of error. Code at is the instruction running at the time, data at is the address it tried to reach.
Address space, devb-sdmmc-rc220
The card driver, PID 7. Its memory was in use when the kernel faulted.
Containment
A fault in one process is normally held inside it and that process is restarted. This fault reached the kernel.
Shutdown
The system stopped itself before the CPU and memory could lock up, then restarted.
Pack MRB-4
Capacitor 3 was dead at the time. At 10:41 deep sleep was refused for the same reason. Have the pack serviced.
Press on HOW.
pressing HOW and waiting for the screen to build
PowerARM has two cores on one chip, a PowerPC core and an ARM core. They share one memory and one memory controller.
The ARM core draws little power and runs light work: the clock, carrier watch, keys, power alerts and sleep. The PowerPC core runs heavy work: files, search, the camera and drawing the screen.
The system moves work between the cores as the load changes. The unit saves power like an ARM machine when idle and works as fast as a PowerPC machine when busy.
Sleep states
Before the PowerPC core is switched off, everything in its cache must be written to memory and to the card. This is the flush. An interrupted flush leaves memory half written, so the pack must hold the supply steady until it ends. With a capacitor open the pack cannot promise this, so the flush is blocked.
Fault mode in this report
At 10:41 deep sleep was refused and the flush was blocked. The card write cache, 184 KB, stayed in memory, lines in the PowerPC cache were never written back, and the unit stayed in light sleep.
The power alert and its detail page came from the ARM core. When BACK closed them, the PowerPC core drew the next screen, and the framebuffer read memory that the held cache had not yet updated. The picture repeated in bands and the display processes stopped.
The kernel then tried to flush the held lines itself. The instruction at FF82E1C4 is that flush. It reached an address in the card driver's memory that was no longer mapped, and the kernel stopped the system.
getting up off the felt and holding a hand out to Mirena Can I have it? I want to see what it is doing.
handing over the communicator Yes, take it.
taking the communicator, pressing NEXT and looking at the screen
QNX is built around a small kernel, procnto-600. It starts processes, gives each one its own memory and passes messages between them.
Drivers are ordinary processes. The card driver, the display driver and the key driver each run on their own and can be stopped and started again without stopping the unit.
The kernel keeps a map for every process. The map says which addresses the process may use and where they lie in memory. An address outside the map is not mapped.
When a process uses an address that is not mapped, the kernel stops that process only. When the kernel itself does it, nothing is left to stop it, so the whole system stops. This is a kernel panic.
Shared buffers
The card driver and the display share some buffers, so a picture read from the card can go to the screen without being copied. The same memory appears in both maps.
Fault mode in this report
The address FF8A6F30 lay in a buffer shared by the card driver and the display. When the display processes stopped at 10:42, their buffers were released and the address was taken out of the map.
The held cache still had lines for that address. At 10:42 the kernel flushed them for the card driver, PID 7, and reached an address that was no longer mapped. The fault happened inside the kernel, so it could not be held inside one process.
The bucket #
looking up from the screen at Raduj What are all these things? Kernel, process, map, buffer.
The device is built around something called preemption. The kernel is a program that handles the interaction between other programs and the parts of the machine, so the programmer only has to write instructions like print, arithmetic, if, initialize and return rather than memorize mnemonics like cmp, mov and deal with the conflicting nature of PowerPC and ARM registers in PowerARM.
A process is a set of instructions being executed right now. In a preemption environment, the computer decides via another program called a scheduler what process should be given priority so everything is seamless.
A map is, as the word says, a table that maps everything that is loaded into memory. This can include both programs and text.
A buffer is like a bucket allocated to a program by the kernel in memory that allows it to temporarily store data while it's processing.
reading the page again with the communicator held close So the display had a bucket, and when the display stopped the bucket was taken away, but the cache still had water to pour into it and poured it where the bucket used to be. Is that what made it all stop?
Yes, and since you cannot turn water into a void, the kernel took away the cache, and since you cannot operate without the cache because it's how you store data about to be processed, the system crashed.
lowering the communicator onto her knee Then it will do it again, won't it? The capacitor is still dead, so the next time it tries to sleep deep it will hold the water again.
The panic, unlikely. The block, yes, to protect the pack. Turn the page to the framebuffer or something to see exactly what happened.
pressing NEXT and waiting for the screen to build
The framebuffer is an area of memory with one place for every point on the screen. The display controller reads it from top to bottom many times a second and shows what it finds.
io-display and devg-rc220 draw each new screen in the PowerPC cache first. They then ask for a memory flush, so the new picture reaches the framebuffer before the controller reads it.
Two kinds of flush
Known issue, RC-220
Both flushes are started by the same system call. The call cannot tell which one was asked for. Once a sleep flush is blocked, every later flush is treated as part of it and blocked too.
Fault mode in this report
At 10:41 the sleep flush was blocked because capacitor 3 is open. The power alert and its detail page came from the ARM core and needed no flush. When BACK closed them, the display drew the next screen and asked for a memory flush. The call took it for the blocked sleep flush and held it.
The new picture stayed in the cache. The controller kept reading the old lines from the framebuffer, which is why the lower half repeated in bands. io-display waited for a flush that was never going to end, and after 10 seconds the display processes were stopped.
What the fuck is this? Press OFF.
pressing OFF and watching the screen go dark, then setting the communicator face down on the table It is off. You looked at it like it had bitten you.
Chapter three, the help
Known issues #
No, I'm confused by the terminology and references. We need to go back to the home screen.
turning the communicator over, pressing a key to light it and pressing BACK until the menu comes up
We need to go to help.
touching HELP and pressing OPEN
Applications
- Messages and outbox
- Calls
- Directory
- Files
- Terminal
- Line tester
- Radio log
- Clock and alarm
- Calculator
- Notes
- Camera
System
- Shell
- Settings
- Keys and dock keyboard
Power
- Pack and charge
- Sleep states
- Power faults
Processor and memory
- PowerARM
- Kernel and processes
- Framebuffer
- Shutdown reports
- Known issues
Press on KNOWN ISSUES.
touching KNOWN ISSUES and pressing OPEN
- One call for sleep and memory flush
- Display stops while a flush is held
- There is one word for several things in help and reports
- Tag dropped on copy to EXT4 or plain FAT32
- Power fault stays on the menu after the alert is cleared
Ah, the confusion is explained. Click on ONE WORD.
touching ONE WORD FOR SEVERAL THINGS and pressing OPEN
Help pages and reports use some words for more than one thing. The words are listed here with each meaning.
Flush
Cache
Sleep
Fault
Off
The component in the title bar shows which meaning a page uses.
Power only #
thinking for a bit Let's see what happens if we connect the cranked tester to the port at the bottom.
handing the communicator to him You do it. I would not know which end of the tester goes where.
pulling the hand crank tester out of his pack and connecting its serial port to the serial port of the communicator
6 V on pin 9
No data on receive or send
No device answered
Ceiling 83 per cent of rated
pressing DETAIL
watching over his arm as the detail screen builds
pressing LOG Let's also check the log this time.
leaning in to read the rows as they come up
pressing the side key to turn off the screen I think it's enough fiddling around.
sitting back against the wall and pulling her knees up Good.
Chapter four, the wall
After work #
also sitting back against the wall alongside her What do you do when you get bored?
I mend things, rope or cloth, whatever is torn. What do you do?
I sit and look at the landscape, whatever it is.
turning her head toward the east window There is not much to look at.
I know, but what else to do when tired after work?
keeping her eyes on the window On the island we worked until dark and then we slept immediately.
The west camp #
Have you ever fallen in love with someone?
looking down at her hands for a moment before answering There was a girl in the west camp. We shared work for a season and I never said anything to her about it.
I have never fallen in love, or at least, I tried to seem like I would never fall in love. I didn't want to deal with the shame in me that comes with misappreciating the potential of being in a relationship. There was a woman I liked in the tenth grade, and when we got to really meet each other, she wouldn't have kept her promises and she would have felt a lot of different things about me in a short amount of time.
And what happened then, between you and her?
She decided that she would rather ignore me forever, and that's the end of it.
Did you ever find out why?
No. I have chosen to rather move forward than guess why she was thinking differently about me every time.
nodding slowly Maybe that was the better thing for you, to not wear yourself down.
Stragglers #
turning to Mirena And you, what do you think about love?
sitting down on the edge of the crate with her back to the stove There was a man in my squad. We were together for a year and a half, and I knew every day that he might not come back, and one day he did not. I know how it happened, I know where, I was told all of it by people who were there but it has not closed anything. So I do not think about love now, I think about not doing that again.
There was a person called Ellie Williams that would have killed every single person on her way in satisfying her revenge. She was believed to be the only immune person despite experimental probes showing that there were actually many infected but asymptomatic people who either never converted or converted later. Due to a man's desire to save what was thought to be the only immune child by killing a doctor, his daughter decided to revenge by killing that man, and because he was her surrogate, she decided to trail her across the north-west.
shrugging That is what people did then, you killed mine and I kill yours, and it went around like that for years. We had an order once to put down every straggler we found, no questions. Nobody got anything out of it. She just did it louder than the rest of us.
Before the founding of the Collective, there was an initial treaty on medical ethics which proposed the right to life. And it was exclusively about what defines the right to live.
looking over at him Who wrote it? I have heard of the Collective, I have never heard of a treaty before it.
A council of independent researchers who were looking to dispel the unscientific conceptions around the infection.
reaching over to the chair and running her hand along the lining This is dry now. You can have it back.
Chapter five, the street door
The stairwell #
getting up, lifting the coat and pulling it over her shoulders Then we should go before it gets dark.
shouldering his pack and placing the communicator and hand crank tester inside the large back section Alright.
standing up off the crate and going to the door ahead of them I will come down with you as far as the street.
Nila lifts her bundle off the wall with the pickaxe still tied along it, puts it on her shoulder and follows Mirena alongside Raduj. The three of them go down the stairwell, past the open door on the second floor with the sorted wire laid out in coils, and down the last flight to the street door.
Block nine #
coming out of the street door after Nila Now we are out.
standing in the doorway with her good hand on the frame Go on, then. You know where I am, both of you.
Or see you in block nine, or whatever.
lifting her hand off the frame Block nine, then.
stepping back toward the doorway It was good to see you.
You too. Both of you.
See you.
stepping back inside and closing the street door See you.
They turn away from the door and go up the street past the shrubs, with the four storey block behind them. Nila has the bundle on her shoulder and the pickaxe tied along it. They walk part of the road inland toward Sidliste for the rest of the morning.
Part of the CSD series. Set in the Last of Us universe, decades after the first generation, in a future that diverges from the game.
Typeset in Literata and IBM Plex Mono, both under the SIL Open Font License, version 1.1. The license texts sit in the fonts folder beside this file.